/* Generated by Makefile from block.c.mpers.i btrfs.c.mpers.i dirent.c.mpers.i evdev_mpers.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 fetch_struct_xfs_quotastat.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 perf_ioctl.c.mpers.i print_aio_sigset.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. */
extern int mx32_block_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mx32_btrfs_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mx32_evdev_write_ioctl_mpers(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern unsigned int mx32_get_sock_fprog_size(void);
extern _Bool mx32_fetch_bpf_fprog(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern _Bool mx32_fetch_struct_flock(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern _Bool mx32_fetch_struct_flock64(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern int mx32_fetch_keyctl_kdf_params(struct tcb *const tcp, kernel_ulong_t addr, struct strace_keyctl_kdf_params *p);
extern int mx32_fetch_struct_mmsghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern unsigned int mx32_sizeof_struct_mmsghdr(void);
extern int mx32_fetch_struct_msghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern _Bool mx32_fetch_struct_stat(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
extern _Bool mx32_fetch_struct_stat64(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
extern _Bool mx32_fetch_struct_statfs(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_statfs *const p);
extern _Bool mx32_fetch_struct_statfs64(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t size, struct strace_statfs *const p);
extern _Bool mx32_fetch_struct_quotastat(struct tcb *const tcp, const kernel_ulong_t data, void *p);
extern int mx32_hdio_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mx32_loop_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mx32_mtd_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mx32_perf_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern void mx32_print_aio_sigset(struct tcb *tcp, const kernel_ulong_t addr);
extern void mx32_print_group_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len);
extern void mx32_printmqattr(struct tcb *const tcp, const kernel_ulong_t addr, const _Bool decode_flags);
extern void mx32_tprint_msgbuf(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t count);
extern int mx32_decode_sg_req_info(struct tcb *const tcp, const kernel_ulong_t arg);
extern void mx32_print_sigevent(struct tcb *const tcp, const kernel_ulong_t addr);
extern _Bool mx32_print_struct_timespec_data_size(const void *arg, const size_t size);
extern _Bool mx32_print_struct_timespec_array_data_size(const void *arg, const unsigned int nmemb, const size_t size);
extern void mx32_print_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
extern const char * mx32_sprint_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_print_timespec_utime_pair(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_print_itimerspec(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_print_struct_timeval(const void *arg);
extern _Bool mx32_print_struct_timeval_data_size(const void *arg, const size_t size);
extern void mx32_print_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_print_timeval_utimes(struct tcb *const tcp, const kernel_ulong_t addr);
extern const char * mx32_sprint_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_print_itimerval(struct tcb *const tcp, const kernel_ulong_t addr);
extern int mx32_print_timex(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_printrusage(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_printsiginfo_at(struct tcb *const tcp, const kernel_ulong_t addr);
extern void mx32_print_siginfo_array(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t len);
extern int mx32_rtc_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mx32_decode_sg_io_v3(struct tcb *const tcp, const kernel_ulong_t arg);
extern int mx32_sock_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mx32_v4l2_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
