/* 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_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)

 _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
