/* 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_stat.c.mpers.i fetch_struct_stat64.c.mpers.i fetch_struct_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i loop.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sg_req_info.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timespec.c.mpers.i print_timeval.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rt_sigreturn.c.mpers.i rtc.c.mpers.i sg_io_v3.c.mpers.i sigaltstack.c.mpers.i sock.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i ustat.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
typedef struct {
 int (*block_ioctl)(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
#define block_ioctl MPERS_PRINTER_NAME(block_ioctl)

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

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

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

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

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

 int (*fetch_struct_mmsghdr)(struct tcb *const tcp, const kernel_ulong_t addr, void *const 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 *const tcp, const kernel_ulong_t addr, void *const p);
#define fetch_struct_msghdr MPERS_PRINTER_NAME(fetch_struct_msghdr)

 _Bool (*fetch_struct_stat)(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
#define fetch_struct_stat MPERS_PRINTER_NAME(fetch_struct_stat)

 _Bool (*fetch_struct_stat64)(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
#define fetch_struct_stat64 MPERS_PRINTER_NAME(fetch_struct_stat64)

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

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

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

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

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

 void (*printmqattr)(struct tcb *const tcp, const kernel_ulong_t addr, const _Bool decode_flags);
#define printmqattr MPERS_PRINTER_NAME(printmqattr)

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

 int (*decode_sg_req_info)(struct tcb *const tcp, const kernel_ulong_t arg);
#define decode_sg_req_info MPERS_PRINTER_NAME(decode_sg_req_info)

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

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

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

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

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

 void (*print_struct_timeval)(const void *arg);
#define print_struct_timeval MPERS_PRINTER_NAME(print_struct_timeval)

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

 void (*print_timeval_utimes)(struct tcb *const tcp, const kernel_ulong_t addr);
#define print_timeval_utimes MPERS_PRINTER_NAME(print_timeval_utimes)

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

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

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

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

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

 void (*print_siginfo_array)(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t len);
#define print_siginfo_array MPERS_PRINTER_NAME(print_siginfo_array)

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

 int (*decode_sg_io_v3)(struct tcb *const tcp, const kernel_ulong_t arg);
#define decode_sg_io_v3 MPERS_PRINTER_NAME(decode_sg_io_v3)

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

 int (*v4l2_ioctl)(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t 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
