/* 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 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 block_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int btrfs_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int evdev_write_ioctl_mpers(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern unsigned int get_sock_fprog_size(void);
extern _Bool fetch_bpf_fprog(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern _Bool fetch_struct_flock(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern _Bool fetch_struct_flock64(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern int fetch_keyctl_kdf_params(struct tcb *const tcp, kernel_ulong_t addr, struct strace_keyctl_kdf_params *p);
extern int fetch_struct_mmsghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern unsigned int sizeof_struct_mmsghdr(void);
extern int fetch_struct_msghdr(struct tcb *const tcp, const kernel_ulong_t addr, void *const p);
extern _Bool fetch_struct_stat(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
extern _Bool fetch_struct_stat64(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_stat *const dst);
extern _Bool fetch_struct_statfs(struct tcb *const tcp, const kernel_ulong_t addr, struct strace_statfs *const p);
extern _Bool fetch_struct_statfs64(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t size, struct strace_statfs *const p);
extern int hdio_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int loop_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
extern int mtd_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int perf_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern void print_aio_sigset(struct tcb *tcp, const kernel_ulong_t addr);
extern void print_group_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len);
extern void printmqattr(struct tcb *const tcp, const kernel_ulong_t addr, const _Bool decode_flags);
extern void tprint_msgbuf(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t count);
extern int decode_sg_req_info(struct tcb *const tcp, const kernel_ulong_t arg);
extern void print_sigevent(struct tcb *const tcp, const kernel_ulong_t addr);
extern _Bool print_struct_timespec_data_size(const void *arg, const size_t size);
extern _Bool print_struct_timespec_array_data_size(const void *arg, const unsigned int nmemb, const size_t size);
extern void print_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
extern const char * sprint_timespec(struct tcb *const tcp, const kernel_ulong_t addr);
extern void print_timespec_utime_pair(struct tcb *const tcp, const kernel_ulong_t addr);
extern void print_itimerspec(struct tcb *const tcp, const kernel_ulong_t addr);
extern void print_struct_timeval(const void *arg);
extern _Bool print_struct_timeval_data_size(const void *arg, const size_t size);
extern void print_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
extern void print_timeval_utimes(struct tcb *const tcp, const kernel_ulong_t addr);
extern const char * sprint_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
extern void print_itimerval(struct tcb *const tcp, const kernel_ulong_t addr);
extern int print_timex(struct tcb *const tcp, const kernel_ulong_t addr);
extern void printrusage(struct tcb *const tcp, const kernel_ulong_t addr);
extern void printsiginfo_at(struct tcb *const tcp, const kernel_ulong_t addr);
extern void print_siginfo_array(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t len);
extern int rtc_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern int decode_sg_io_v3(struct tcb *const tcp, const kernel_ulong_t arg);
extern int sock_ioctl(struct tcb *tcp, const unsigned int code, const kernel_ulong_t arg);
extern int v4l2_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
