/* 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 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_pair)(struct tcb *const tcp, const kernel_ulong_t addr);
#define print_timeval_pair MPERS_PRINTER_NAME(print_timeval_pair)

 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
