/* 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. */
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_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg);
extern _Bool fetch_seccomp_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_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 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);
