/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev.c.mpers.i fetch_bpf_fprog.c.mpers.i fetch_struct_flock.c.mpers.i fetch_struct_keyctl_kdf_params.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_group_req.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)

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

 _Bool (*fetch_bpf_fprog)(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
#define fetch_bpf_fprog MPERS_PRINTER_NAME(fetch_bpf_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_keyctl_kdf_params)(struct tcb *const tcp, kernel_ulong_t addr, struct strace_keyctl_kdf_params *p);
#define fetch_keyctl_kdf_params MPERS_PRINTER_NAME(fetch_keyctl_kdf_params)

 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 (*print_group_req)(struct tcb *const tcp, const kernel_ulong_t addr, const int len);
#define print_group_req MPERS_PRINTER_NAME(print_group_req)

 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)

 _Bool (*print_struct_timespec_data_size)(const void *arg, const size_t size);
#define print_struct_timespec_data_size MPERS_PRINTER_NAME(print_struct_timespec_data_size)

 _Bool (*print_struct_timespec_array_data_size)(const void *arg, const unsigned int nmemb, const size_t size);
#define print_struct_timespec_array_data_size MPERS_PRINTER_NAME(print_struct_timespec_array_data_size)

 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)

 _Bool (*print_struct_timeval_data_size)(const void *arg, const size_t size);
#define print_struct_timeval_data_size MPERS_PRINTER_NAME(print_struct_timeval_data_size)

 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
