/* 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. */
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 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 void print_timeval(struct tcb *const tcp, const kernel_ulong_t addr);
extern void print_timeval_pair(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);
