/* 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_statfs.c.mpers.i hdio.c.mpers.i ipc_msgctl.c.mpers.i ipc_shmctl.c.mpers.i mtd.c.mpers.i print_mq_attr.c.mpers.i print_msgbuf.c.mpers.i print_sigevent.c.mpers.i print_time.c.mpers.i print_timex.c.mpers.i printrusage.c.mpers.i printsiginfo.c.mpers.i rtc.c.mpers.i sigaltstack.c.mpers.i sysinfo.c.mpers.i times.c.mpers.i utime.c.mpers.i v4l2.c.mpers.i; do not edit. */
extern int block_ioctl(struct tcb *tcp, const unsigned int code, const long arg);
extern int btrfs_ioctl(struct tcb *tcp, const unsigned int code, const long arg);
extern int evdev_ioctl(struct tcb *tcp, const unsigned int code, const long arg);
extern _Bool fetch_seccomp_fprog(struct tcb *tcp, const long addr, void *p);
extern _Bool fetch_struct_flock(struct tcb *tcp, const long addr, void *p);
extern _Bool fetch_struct_flock64(struct tcb *tcp, const long addr, void *p);
extern int fetch_struct_mmsghdr(struct tcb *tcp, const unsigned long addr, void *p);
extern unsigned int sizeof_struct_mmsghdr(void);
extern int fetch_struct_msghdr(struct tcb *tcp, const unsigned long addr, void *p);
extern _Bool fetch_struct_statfs(struct tcb *tcp, const long addr, struct strace_statfs *p);
extern _Bool fetch_struct_statfs64(struct tcb *tcp, const long addr, const unsigned long size, struct strace_statfs *p);
extern int hdio_ioctl(struct tcb *tcp, const unsigned int code, const long arg);
extern int mtd_ioctl(struct tcb *tcp, const unsigned int code, const long arg);
extern void printmqattr(struct tcb *tcp, const long addr);
extern void tprint_msgbuf(struct tcb *tcp, const long addr, const unsigned long count);
extern void print_sigevent(struct tcb *tcp, const long addr);
extern void print_timespec(struct tcb *tcp, const long addr);
extern const char * sprint_timespec(struct tcb *tcp, const long addr);
extern void print_timespec_utime_pair(struct tcb *tcp, const long addr);
extern void print_itimerspec(struct tcb *tcp, const long addr);
extern void print_timeval(struct tcb *tcp, const long addr);
extern void print_timeval_pair(struct tcb *tcp, const long addr);
extern const char * sprint_timeval(struct tcb *tcp, const long addr);
extern void print_itimerval(struct tcb *tcp, const long addr);
extern int print_timex(struct tcb *tcp, const long addr);
extern void printrusage(struct tcb *tcp, long addr);
extern void printsiginfo_at(struct tcb *tcp, long addr);
extern void print_siginfo_array(struct tcb *tcp, unsigned long addr, unsigned long len);
extern int rtc_ioctl(struct tcb *tcp, const unsigned int code, const long arg);
extern int v4l2_ioctl(struct tcb *tcp, const unsigned int code, const long arg);
