/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_seccomp_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_mmsghdr.c.mpers.i fetch_struct_msghdr.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rtc.c.mpers.i sigaltstack.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
typedef struct {
 int (*block_ioctl)(struct tcb *tcp, const unsigned int code, const long arg);
#define block_ioctl MPERS_PRINTER_NAME(block_ioctl)

 int (*btrfs_ioctl)(struct tcb *tcp, const unsigned int code, const long arg);
#define btrfs_ioctl MPERS_PRINTER_NAME(btrfs_ioctl)

 int (*evdev_ioctl)(struct tcb *tcp, const unsigned int code, const long arg);
#define evdev_ioctl MPERS_PRINTER_NAME(evdev_ioctl)

 _Bool (*fetch_seccomp_fprog)(struct tcb *tcp, const long addr, void *p);
#define fetch_seccomp_fprog MPERS_PRINTER_NAME(fetch_seccomp_fprog)

 _Bool (*fetch_struct_flock)(struct tcb *tcp, const long addr, void *p);
#define fetch_struct_flock MPERS_PRINTER_NAME(fetch_struct_flock)

 _Bool (*fetch_struct_flock64)(struct tcb *tcp, const long addr, void *p);
#define fetch_struct_flock64 MPERS_PRINTER_NAME(fetch_struct_flock64)

 int (*fetch_struct_mmsghdr)(struct tcb *tcp, const unsigned long addr, void *p);
#define fetch_struct_mmsghdr MPERS_PRINTER_NAME(fetch_struct_mmsghdr)

 unsigned int (*sizeof_struct_mmsghdr)(void);
#define sizeof_struct_mmsghdr MPERS_PRINTER_NAME(sizeof_struct_mmsghdr)

 int (*fetch_struct_msghdr)(struct tcb *tcp, const unsigned long addr, void *p);
#define fetch_struct_msghdr MPERS_PRINTER_NAME(fetch_struct_msghdr)

 _Bool (*fetch_struct_statfs)(struct tcb *tcp, const long addr, struct strace_statfs *p);
#define fetch_struct_statfs MPERS_PRINTER_NAME(fetch_struct_statfs)

 _Bool (*fetch_struct_statfs64)(struct tcb *tcp, const long addr, const unsigned long size, struct strace_statfs *p);
#define fetch_struct_statfs64 MPERS_PRINTER_NAME(fetch_struct_statfs64)

 int (*hdio_ioctl)(struct tcb *tcp, const unsigned int code, const long arg);
#define hdio_ioctl MPERS_PRINTER_NAME(hdio_ioctl)

 int (*mtd_ioctl)(struct tcb *tcp, const unsigned int code, const long arg);
#define mtd_ioctl MPERS_PRINTER_NAME(mtd_ioctl)

 void (*printmqattr)(struct tcb *tcp, const long addr);
#define printmqattr MPERS_PRINTER_NAME(printmqattr)

 void (*tprint_msgbuf)(struct tcb *tcp, const long addr, const unsigned long count);
#define tprint_msgbuf MPERS_PRINTER_NAME(tprint_msgbuf)

 void (*print_sigevent)(struct tcb *tcp, const long addr);
#define print_sigevent MPERS_PRINTER_NAME(print_sigevent)

 void (*print_timespec)(struct tcb *tcp, const long addr);
#define print_timespec MPERS_PRINTER_NAME(print_timespec)

 const char * (*sprint_timespec)(struct tcb *tcp, const long addr);
#define sprint_timespec MPERS_PRINTER_NAME(sprint_timespec)

 void (*print_timespec_utime_pair)(struct tcb *tcp, const long addr);
#define print_timespec_utime_pair MPERS_PRINTER_NAME(print_timespec_utime_pair)

 void (*print_itimerspec)(struct tcb *tcp, const long addr);
#define print_itimerspec MPERS_PRINTER_NAME(print_itimerspec)

 void (*print_timeval)(struct tcb *tcp, const long addr);
#define print_timeval MPERS_PRINTER_NAME(print_timeval)

 void (*print_timeval_pair)(struct tcb *tcp, const long addr);
#define print_timeval_pair MPERS_PRINTER_NAME(print_timeval_pair)

 const char * (*sprint_timeval)(struct tcb *tcp, const long addr);
#define sprint_timeval MPERS_PRINTER_NAME(sprint_timeval)

 void (*print_itimerval)(struct tcb *tcp, const long addr);
#define print_itimerval MPERS_PRINTER_NAME(print_itimerval)

 int (*print_timex)(struct tcb *tcp, const long addr);
#define print_timex MPERS_PRINTER_NAME(print_timex)

 void (*printrusage)(struct tcb *tcp, long addr);
#define printrusage MPERS_PRINTER_NAME(printrusage)

 void (*printsiginfo_at)(struct tcb *tcp, long addr);
#define printsiginfo_at MPERS_PRINTER_NAME(printsiginfo_at)

 void (*print_siginfo_array)(struct tcb *tcp, unsigned long addr, unsigned long len);
#define print_siginfo_array MPERS_PRINTER_NAME(print_siginfo_array)

 int (*rtc_ioctl)(struct tcb *tcp, const unsigned int code, const long arg);
#define rtc_ioctl MPERS_PRINTER_NAME(rtc_ioctl)

 int (*v4l2_ioctl)(struct tcb *tcp, const unsigned int code, const long arg);
#define v4l2_ioctl MPERS_PRINTER_NAME(v4l2_ioctl)

} struct_printers;
extern const struct_printers *printers;
#define MPERS_PRINTER_NAME(printer_name) printers->printer_name
