//===-- sanitizer_platform_limits_posix.h ---------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file is a part of Sanitizer common code.
//
// Sizes and layouts of platform-specific POSIX data structures.
//===----------------------------------------------------------------------===//

#ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H
#define SANITIZER_PLATFORM_LIMITS_POSIX_H

#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_MAC

#include "sanitizer_internal_defs.h"
#include "sanitizer_platform.h"

#if SANITIZER_FREEBSD
// FreeBSD's dlopen() returns a pointer to an Obj_Entry structure that
// incorporates the map structure.
# define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \
    ((link_map*)((handle) == nullptr ? nullptr : ((char*)(handle) + 544)))
// Get sys/_types.h, because that tells us whether 64-bit inodes are
// used in struct dirent below.
#include <sys/_types.h>
#else
# define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle))
#endif  // !SANITIZER_FREEBSD

#ifndef __GLIBC_PREREQ
#define __GLIBC_PREREQ(x, y) 0
#endif

namespace __sanitizer {
  extern unsigned struct_utsname_sz;
  extern unsigned struct_stat_sz;
#if !SANITIZER_FREEBSD && !SANITIZER_IOS
  extern unsigned struct_stat64_sz;
#endif
  extern unsigned struct_rusage_sz;
  extern unsigned siginfo_t_sz;
  extern unsigned struct_itimerval_sz;
  extern unsigned pthread_t_sz;
  extern unsigned pthread_cond_t_sz;
  extern unsigned pid_t_sz;
  extern unsigned timeval_sz;
  extern unsigned uid_t_sz;
  extern unsigned gid_t_sz;
  extern unsigned mbstate_t_sz;
  extern unsigned struct_timezone_sz;
  extern unsigned struct_tms_sz;
  extern unsigned struct_itimerspec_sz;
  extern unsigned struct_sigevent_sz;
  extern unsigned struct_sched_param_sz;
  extern unsigned struct_statfs64_sz;

#if !SANITIZER_ANDROID
  extern unsigned struct_statfs_sz;
  extern unsigned struct_sockaddr_sz;
  extern unsigned ucontext_t_sz;
#endif // !SANITIZER_ANDROID

#if SANITIZER_LINUX

#if defined(__x86_64__)
  const unsigned struct_kernel_stat_sz = 144;
  const unsigned struct_kernel_stat64_sz = 0;
#elif defined(__i386__)
  const unsigned struct_kernel_stat_sz = 64;
  const unsigned struct_kernel_stat64_sz = 96;
#elif defined(__arm__)
  const unsigned struct_kernel_stat_sz = 64;
  const unsigned struct_kernel_stat64_sz = 104;
#elif defined(__aarch64__)
  const unsigned struct_kernel_stat_sz = 128;
  const unsigned struct_kernel_stat64_sz = 104;
#elif defined(__powerpc__) && !defined(__powerpc64__)
  const unsigned struct_kernel_stat_sz = 72;
  const unsigned struct_kernel_stat64_sz = 104;
#elif defined(__powerpc64__)
  const unsigned struct_kernel_stat_sz = 144;
  const unsigned struct_kernel_stat64_sz = 104;
#elif defined(__mips__)
  const unsigned struct_kernel_stat_sz =
                 SANITIZER_ANDROID ? FIRST_32_SECOND_64(104, 128) :
                                     FIRST_32_SECOND_64(160, 216);
  const unsigned struct_kernel_stat64_sz = 104;
#elif defined(__s390__) && !defined(__s390x__)
  const unsigned struct_kernel_stat_sz = 64;
  const unsigned struct_kernel_stat64_sz = 104;
#elif defined(__s390x__)
  const unsigned struct_kernel_stat_sz = 144;
  const unsigned struct_kernel_stat64_sz = 0;
#elif defined(__sparc__) && defined(__arch64__)
  const unsigned struct___old_kernel_stat_sz = 0;
  const unsigned struct_kernel_stat_sz = 104;
  const unsigned struct_kernel_stat64_sz = 144;
#elif defined(__sparc__) && !defined(__arch64__)
  const unsigned struct___old_kernel_stat_sz = 0;
  const unsigned struct_kernel_stat_sz = 64;
  const unsigned struct_kernel_stat64_sz = 104;
#endif
  struct __sanitizer_perf_event_attr {
    unsigned type;
    unsigned size;
    // More fields that vary with the kernel version.
  };

  extern unsigned struct_epoll_event_sz;
  extern unsigned struct_sysinfo_sz;
  extern unsigned __user_cap_header_struct_sz;
  extern unsigned __user_cap_data_struct_sz;
  extern unsigned struct_new_utsname_sz;
  extern unsigned struct_old_utsname_sz;
  extern unsigned struct_oldold_utsname_sz;

  const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long);
#endif  // SANITIZER_LINUX

#if SANITIZER_LINUX || SANITIZER_FREEBSD

#if defined(__powerpc64__) || defined(__s390__)
  const unsigned struct___old_kernel_stat_sz = 0;
#elif !defined(__sparc__)
  const unsigned struct___old_kernel_stat_sz = 32;
#endif

  extern unsigned struct_rlimit_sz;
  extern unsigned struct_utimbuf_sz;
  extern unsigned struct_timespec_sz;

  struct __sanitizer_iocb {
    u64   aio_data;
    u32   aio_key_or_aio_reserved1; // Simply crazy.
    u32   aio_reserved1_or_aio_key; // Luckily, we don't need these.
    u16   aio_lio_opcode;
    s16   aio_reqprio;
    u32   aio_fildes;
    u64   aio_buf;
    u64   aio_nbytes;
    s64   aio_offset;
    u64   aio_reserved2;
    u64   aio_reserved3;
  };

  struct __sanitizer_io_event {
    u64 data;
    u64 obj;
    u64 res;
    u64 res2;
  };

  const unsigned iocb_cmd_pread = 0;
  const unsigned iocb_cmd_pwrite = 1;
  const unsigned iocb_cmd_preadv = 7;
  const unsigned iocb_cmd_pwritev = 8;

  struct __sanitizer___sysctl_args {
    int *name;
    int nlen;
    void *oldval;
    uptr *oldlenp;
    void *newval;
    uptr newlen;
    unsigned long ___unused[4];
  };

  const unsigned old_sigset_t_sz = sizeof(unsigned long);

  struct __sanitizer_sem_t {
#if SANITIZER_ANDROID && defined(_LP64)
    int data[4];
#elif SANITIZER_ANDROID && !defined(_LP64)
    int data;
#elif SANITIZER_LINUX
    uptr data[4];
#elif SANITIZER_FREEBSD
    u32 data[4];
#endif
  };
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD

#if SANITIZER_ANDROID
  struct __sanitizer_mallinfo {
    uptr v[10];
  };
#endif

#if SANITIZER_LINUX && !SANITIZER_ANDROID
  struct __sanitizer_mallinfo {
    int v[10];
  };

  extern unsigned struct_ustat_sz;
  extern unsigned struct_rlimit64_sz;
  extern unsigned struct_statvfs64_sz;

  struct __sanitizer_ipc_perm {
    int __key;
    int uid;
    int gid;
    int cuid;
    int cgid;
#ifdef __powerpc__
    unsigned mode;
    unsigned __seq;
    u64 __unused1;
    u64 __unused2;
#elif defined(__sparc__)
#if defined(__arch64__)
    unsigned mode;
    unsigned short __pad1;
#else
    unsigned short __pad1;
    unsigned short mode;
    unsigned short __pad2;
#endif
    unsigned short __seq;
    unsigned long long __unused1;
    unsigned long long __unused2;
#elif defined(__mips__) || defined(__aarch64__) || defined(__s390x__)
    unsigned int mode;
    unsigned short __seq;
    unsigned short __pad1;
    unsigned long __unused1;
    unsigned long __unused2;
#else
    unsigned short mode;
    unsigned short __pad1;
    unsigned short __seq;
    unsigned short __pad2;
#if defined(__x86_64__) && !defined(_LP64)
    u64 __unused1;
    u64 __unused2;
#else
    unsigned long __unused1;
    unsigned long __unused2;
#endif
#endif
  };

  struct __sanitizer_shmid_ds {
    __sanitizer_ipc_perm shm_perm;
  #if defined(__sparc__)
  #if !defined(__arch64__)
    u32 __pad1;
  #endif
    long shm_atime;
  #if !defined(__arch64__)
    u32 __pad2;
  #endif
    long shm_dtime;
  #if !defined(__arch64__)
    u32 __pad3;
  #endif
    long shm_ctime;
    uptr shm_segsz;
    int shm_cpid;
    int shm_lpid;
    unsigned long shm_nattch;
    unsigned long __glibc_reserved1;
    unsigned long __glibc_reserved2;
  #else
  #ifndef __powerpc__
    uptr shm_segsz;
  #elif !defined(__powerpc64__)
    uptr __unused0;
  #endif
  #if defined(__x86_64__) && !defined(_LP64)
    u64 shm_atime;
    u64 shm_dtime;
    u64 shm_ctime;
  #else
    uptr shm_atime;
  #if !defined(_LP64) && !defined(__mips__)
    uptr __unused1;
  #endif
    uptr shm_dtime;
  #if !defined(_LP64) && !defined(__mips__)
    uptr __unused2;
  #endif
    uptr shm_ctime;
  #if !defined(_LP64) && !defined(__mips__)
    uptr __unused3;
  #endif
  #endif
  #ifdef __powerpc__
    uptr shm_segsz;
  #endif
    int shm_cpid;
    int shm_lpid;
  #if defined(__x86_64__) && !defined(_LP64)
    u64 shm_nattch;
    u64 __unused4;
    u64 __unused5;
  #else
    uptr shm_nattch;
    uptr __unused4;
    uptr __unused5;
  #endif
#endif
  };
#elif SANITIZER_FREEBSD
  struct __sanitizer_ipc_perm {
    unsigned int cuid;
    unsigned int cgid;
    unsigned int uid;
    unsigned int gid;
    unsigned short mode;
    unsigned short seq;
    long key;
  };

  struct __sanitizer_shmid_ds {
    __sanitizer_ipc_perm shm_perm;
    unsigned long shm_segsz;
    unsigned int shm_lpid;
    unsigned int shm_cpid;
    int shm_nattch;
    unsigned long shm_atime;
    unsigned long shm_dtime;
    unsigned long shm_ctime;
  };
#endif

#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
  extern unsigned struct_msqid_ds_sz;
  extern unsigned struct_mq_attr_sz;
  extern unsigned struct_timex_sz;
  extern unsigned struct_statvfs_sz;
#endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID

  struct __sanitizer_iovec {
    void *iov_base;
    uptr iov_len;
  };

#if !SANITIZER_ANDROID
  struct __sanitizer_ifaddrs {
    struct __sanitizer_ifaddrs *ifa_next;
    char *ifa_name;
    unsigned int ifa_flags;
    void *ifa_addr;    // (struct sockaddr *)
    void *ifa_netmask; // (struct sockaddr *)
    // This is a union on Linux.
# ifdef ifa_dstaddr
# undef ifa_dstaddr
# endif
    void *ifa_dstaddr; // (struct sockaddr *)
    void *ifa_data;
  };
#endif  // !SANITIZER_ANDROID

#if SANITIZER_MAC
  typedef unsigned long __sanitizer_pthread_key_t;
#else
  typedef unsigned __sanitizer_pthread_key_t;
#endif

#if SANITIZER_LINUX && !SANITIZER_ANDROID

  struct __sanitizer_XDR {
    int x_op;
    void *x_ops;
    uptr x_public;
    uptr x_private;
    uptr x_base;
    unsigned x_handy;
  };

  const int __sanitizer_XDR_ENCODE = 0;
  const int __sanitizer_XDR_DECODE = 1;
  const int __sanitizer_XDR_FREE = 2;
#endif

  struct __sanitizer_passwd {
    char *pw_name;
    char *pw_passwd;
    int pw_uid;
    int pw_gid;
#if SANITIZER_MAC || SANITIZER_FREEBSD
    long pw_change;
    char *pw_class;
#endif
#if !(SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32))
    char *pw_gecos;
#endif
    char *pw_dir;
    char *pw_shell;
#if SANITIZER_MAC || SANITIZER_FREEBSD
    long pw_expire;
#endif
#if SANITIZER_FREEBSD
    int pw_fields;
#endif
  };

  struct __sanitizer_group {
    char *gr_name;
    char *gr_passwd;
    int gr_gid;
    char **gr_mem;
  };

#if defined(__x86_64__) && !defined(_LP64)
  typedef long long __sanitizer_time_t;
#else
  typedef long __sanitizer_time_t;
#endif

  struct __sanitizer_timeb {
    __sanitizer_time_t time;
    unsigned short millitm;
    short timezone;
    short dstflag;
  };

  struct __sanitizer_ether_addr {
    u8 octet[6];
  };

  struct __sanitizer_tm {
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;
    int tm_yday;
    int tm_isdst;
    long int tm_gmtoff;
    const char *tm_zone;
  };

#if SANITIZER_LINUX
  struct __sanitizer_mntent {
    char *mnt_fsname;
    char *mnt_dir;
    char *mnt_type;
    char *mnt_opts;
    int mnt_freq;
    int mnt_passno;
  };
#endif

#if SANITIZER_MAC || SANITIZER_FREEBSD
  struct __sanitizer_msghdr {
    void *msg_name;
    unsigned msg_namelen;
    struct __sanitizer_iovec *msg_iov;
    unsigned msg_iovlen;
    void *msg_control;
    unsigned msg_controllen;
    int msg_flags;
  };
  struct __sanitizer_cmsghdr {
    unsigned cmsg_len;
    int cmsg_level;
    int cmsg_type;
  };
#else
  struct __sanitizer_msghdr {
    void *msg_name;
    unsigned msg_namelen;
    struct __sanitizer_iovec *msg_iov;
    uptr msg_iovlen;
    void *msg_control;
    uptr msg_controllen;
    int msg_flags;
  };
  struct __sanitizer_cmsghdr {
    uptr cmsg_len;
    int cmsg_level;
    int cmsg_type;
  };
#endif

#if SANITIZER_MAC
  struct __sanitizer_dirent {
    unsigned long long d_ino;
    unsigned long long d_seekoff;
    unsigned short d_reclen;
    // more fields that we don't care about
  };
#elif SANITIZER_FREEBSD
  struct __sanitizer_dirent {
#if defined(__INO64)
    unsigned long long d_fileno;
    unsigned long long d_off;
#else
    unsigned int d_fileno;
#endif
    unsigned short d_reclen;
    // more fields that we don't care about
  };
#elif SANITIZER_ANDROID || defined(__x86_64__)
  struct __sanitizer_dirent {
    unsigned long long d_ino;
    unsigned long long d_off;
    unsigned short d_reclen;
    // more fields that we don't care about
  };
#else
  struct __sanitizer_dirent {
    uptr d_ino;
    uptr d_off;
    unsigned short d_reclen;
    // more fields that we don't care about
  };
#endif

#if SANITIZER_LINUX && !SANITIZER_ANDROID
  struct __sanitizer_dirent64 {
    unsigned long long d_ino;
    unsigned long long d_off;
    unsigned short d_reclen;
    // more fields that we don't care about
  };
#endif

// 'clock_t' is 32 bits wide on x64 FreeBSD
#if SANITIZER_FREEBSD
  typedef int __sanitizer_clock_t;
#elif defined(__x86_64__) && !defined(_LP64)
  typedef long long __sanitizer_clock_t;
#else
  typedef long __sanitizer_clock_t;
#endif

#if SANITIZER_LINUX
  typedef int __sanitizer_clockid_t;
#endif

#if SANITIZER_LINUX || SANITIZER_FREEBSD
#if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__)\
                   || defined(__mips__)
  typedef unsigned __sanitizer___kernel_uid_t;
  typedef unsigned __sanitizer___kernel_gid_t;
#else
  typedef unsigned short __sanitizer___kernel_uid_t;
  typedef unsigned short __sanitizer___kernel_gid_t;
#endif
#if defined(__x86_64__) && !defined(_LP64)
  typedef long long __sanitizer___kernel_off_t;
#else
  typedef long __sanitizer___kernel_off_t;
#endif

#if defined(__powerpc__) || defined(__mips__)
  typedef unsigned int __sanitizer___kernel_old_uid_t;
  typedef unsigned int __sanitizer___kernel_old_gid_t;
#else
  typedef unsigned short __sanitizer___kernel_old_uid_t;
  typedef unsigned short __sanitizer___kernel_old_gid_t;
#endif

  typedef long long __sanitizer___kernel_loff_t;
  typedef struct {
    unsigned long fds_bits[1024 / (8 * sizeof(long))];
  } __sanitizer___kernel_fd_set;
#endif

  // This thing depends on the platform. We are only interested in the upper
  // limit. Verified with a compiler assert in .cc.
  const int pthread_attr_t_max_sz = 128;
  union __sanitizer_pthread_attr_t {
    char size[pthread_attr_t_max_sz]; // NOLINT
    void *align;
  };

#if SANITIZER_ANDROID
# if SANITIZER_MIPS
  typedef unsigned long __sanitizer_sigset_t[16/sizeof(unsigned long)];
# else
  typedef unsigned long __sanitizer_sigset_t;
# endif
#elif SANITIZER_MAC
  typedef unsigned __sanitizer_sigset_t;
#elif SANITIZER_LINUX
  struct __sanitizer_sigset_t {
    // The size is determined by looking at sizeof of real sigset_t on linux.
    uptr val[128 / sizeof(uptr)];
  };
#elif SANITIZER_FREEBSD
  struct __sanitizer_sigset_t {
     // uint32_t * 4
     unsigned int __bits[4];
  };
#endif

  // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
#if SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 64)
  struct __sanitizer_sigaction {
    unsigned sa_flags;
    union {
      void (*sigaction)(int sig, void *siginfo, void *uctx);
      void (*handler)(int sig);
    };
    __sanitizer_sigset_t sa_mask;
    void (*sa_restorer)();
  };
#elif SANITIZER_ANDROID && SANITIZER_MIPS32  // check this before WORDSIZE == 32
  struct __sanitizer_sigaction {
    unsigned sa_flags;
    union {
      void (*sigaction)(int sig, void *siginfo, void *uctx);
      void (*handler)(int sig);
    };
    __sanitizer_sigset_t sa_mask;
  };
#elif SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32)
  struct __sanitizer_sigaction {
    union {
      void (*sigaction)(int sig, void *siginfo, void *uctx);
      void (*handler)(int sig);
    };
    __sanitizer_sigset_t sa_mask;
    uptr sa_flags;
    void (*sa_restorer)();
  };
#else // !SANITIZER_ANDROID
  struct __sanitizer_sigaction {
#if defined(__mips__) && !SANITIZER_FREEBSD
    unsigned int sa_flags;
#endif
    union {
      void (*sigaction)(int sig, void *siginfo, void *uctx);
      void (*handler)(int sig);
    };
#if SANITIZER_FREEBSD
    int sa_flags;
    __sanitizer_sigset_t sa_mask;
#else
#if defined(__s390x__)
    int sa_resv;
#else
    __sanitizer_sigset_t sa_mask;
#endif
#ifndef __mips__
#if defined(__sparc__)
#if __GLIBC_PREREQ (2, 20)
    // On sparc glibc 2.19 and earlier sa_flags was unsigned long.
#if defined(__arch64__)
    // To maintain ABI compatibility on sparc64 when switching to an int,
    // __glibc_reserved0 was added.
    int __glibc_reserved0;
#endif
    int sa_flags;
#else
    unsigned long sa_flags;
#endif
#else
    int sa_flags;
#endif
#endif
#endif
#if SANITIZER_LINUX
    void (*sa_restorer)();
#endif
#if defined(__mips__) && (SANITIZER_WORDSIZE == 32)
    int sa_resv[1];
#endif
#if defined(__s390x__)
    __sanitizer_sigset_t sa_mask;
#endif
  };
#endif // !SANITIZER_ANDROID

#if SANITIZER_FREEBSD
  typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t;
#elif defined(__mips__)
  struct __sanitizer_kernel_sigset_t {
    uptr sig[2];
  };
#else
  struct __sanitizer_kernel_sigset_t {
    u8 sig[8];
  };
#endif

  // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
#if SANITIZER_MIPS
  struct __sanitizer_kernel_sigaction_t {
    unsigned int sa_flags;
    union {
      void (*handler)(int signo);
      void (*sigaction)(int signo, void *info, void *ctx);
    };
    __sanitizer_kernel_sigset_t sa_mask;
    void (*sa_restorer)(void);
  };
#else
  struct __sanitizer_kernel_sigaction_t {
    union {
      void (*handler)(int signo);
      void (*sigaction)(int signo, void *info, void *ctx);
    };
    unsigned long sa_flags;
    void (*sa_restorer)(void);
    __sanitizer_kernel_sigset_t sa_mask;
  };
#endif

  extern uptr sig_ign;
  extern uptr sig_dfl;
  extern uptr sa_siginfo;

#if SANITIZER_LINUX
  extern int e_tabsz;
#endif

  extern int af_inet;
  extern int af_inet6;
  uptr __sanitizer_in_addr_sz(int af);

#if SANITIZER_LINUX || SANITIZER_FREEBSD
  struct __sanitizer_dl_phdr_info {
    uptr dlpi_addr;
    const char *dlpi_name;
    const void *dlpi_phdr;
    short dlpi_phnum;
  };

  extern unsigned struct_ElfW_Phdr_sz;
#endif

  struct __sanitizer_addrinfo {
    int ai_flags;
    int ai_family;
    int ai_socktype;
    int ai_protocol;
#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
    unsigned ai_addrlen;
    char *ai_canonname;
    void *ai_addr;
#else // LINUX
    unsigned ai_addrlen;
    void *ai_addr;
    char *ai_canonname;
#endif
    struct __sanitizer_addrinfo *ai_next;
  };

  struct __sanitizer_hostent {
    char *h_name;
    char **h_aliases;
    int h_addrtype;
    int h_length;
    char **h_addr_list;
  };

  struct __sanitizer_pollfd {
    int fd;
    short events;
    short revents;
  };

#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
  typedef unsigned __sanitizer_nfds_t;
#else
  typedef unsigned long __sanitizer_nfds_t;
#endif

#if !SANITIZER_ANDROID
# if SANITIZER_LINUX
  struct __sanitizer_glob_t {
    uptr gl_pathc;
    char **gl_pathv;
    uptr gl_offs;
    int gl_flags;

    void (*gl_closedir)(void *dirp);
    void *(*gl_readdir)(void *dirp);
    void *(*gl_opendir)(const char *);
    int (*gl_lstat)(const char *, void *);
    int (*gl_stat)(const char *, void *);
  };
# elif SANITIZER_FREEBSD
  struct __sanitizer_glob_t {
    uptr gl_pathc;
    uptr gl_matchc;
    uptr gl_offs;
    int gl_flags;
    char **gl_pathv;
    int (*gl_errfunc)(const char*, int);
    void (*gl_closedir)(void *dirp);
    struct dirent *(*gl_readdir)(void *dirp);
    void *(*gl_opendir)(const char*);
    int (*gl_lstat)(const char*, void* /* struct stat* */);
    int (*gl_stat)(const char*, void* /* struct stat* */);
  };
# endif  // SANITIZER_FREEBSD

# if SANITIZER_LINUX || SANITIZER_FREEBSD
  extern int glob_nomatch;
  extern int glob_altdirfunc;
# endif
#endif  // !SANITIZER_ANDROID

  extern unsigned path_max;

  struct __sanitizer_wordexp_t {
    uptr we_wordc;
    char **we_wordv;
    uptr we_offs;
#if SANITIZER_FREEBSD
    char *we_strings;
    uptr we_nbytes;
#endif
  };

#if SANITIZER_LINUX && !SANITIZER_ANDROID
  struct __sanitizer_FILE {
    int _flags;
    char *_IO_read_ptr;
    char *_IO_read_end;
    char *_IO_read_base;
    char *_IO_write_base;
    char *_IO_write_ptr;
    char *_IO_write_end;
    char *_IO_buf_base;
    char *_IO_buf_end;
    char *_IO_save_base;
    char *_IO_backup_base;
    char *_IO_save_end;
    void *_markers;
    __sanitizer_FILE *_chain;
    int _fileno;
  };
# define SANITIZER_HAS_STRUCT_FILE 1
#else
  typedef void __sanitizer_FILE;
# define SANITIZER_HAS_STRUCT_FILE 0
#endif

#if SANITIZER_LINUX && !SANITIZER_ANDROID && \
  (defined(__i386) || defined(__x86_64) || defined(__mips64) || \
    defined(__powerpc64__) || defined(__aarch64__) || defined(__arm__) || \
    defined(__s390__))
  extern unsigned struct_user_regs_struct_sz;
  extern unsigned struct_user_fpregs_struct_sz;
  extern unsigned struct_user_fpxregs_struct_sz;
  extern unsigned struct_user_vfpregs_struct_sz;

  extern int ptrace_peektext;
  extern int ptrace_peekdata;
  extern int ptrace_peekuser;
  extern int ptrace_getregs;
  extern int ptrace_setregs;
  extern int ptrace_getfpregs;
  extern int ptrace_setfpregs;
  extern int ptrace_getfpxregs;
  extern int ptrace_setfpxregs;
  extern int ptrace_getvfpregs;
  extern int ptrace_setvfpregs;
  extern int ptrace_getsiginfo;
  extern int ptrace_setsiginfo;
  extern int ptrace_getregset;
  extern int ptrace_setregset;
  extern int ptrace_geteventmsg;
#endif

#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
  extern unsigned struct_shminfo_sz;
  extern unsigned struct_shm_info_sz;
  extern int shmctl_ipc_stat;
  extern int shmctl_ipc_info;
  extern int shmctl_shm_info;
  extern int shmctl_shm_stat;
#endif

#if !SANITIZER_MAC && !SANITIZER_FREEBSD
  extern unsigned struct_utmp_sz;
#endif
#if !SANITIZER_ANDROID
  extern unsigned struct_utmpx_sz;
#endif

  extern int map_fixed;

  // ioctl arguments
  struct __sanitizer_ifconf {
    int ifc_len;
    union {
      void *ifcu_req;
    } ifc_ifcu;
#if SANITIZER_MAC
  } __attribute__((packed));
#else
  };
#endif

#if SANITIZER_LINUX && !SANITIZER_ANDROID
struct __sanitizer__obstack_chunk {
  char *limit;
  struct __sanitizer__obstack_chunk *prev;
};

struct __sanitizer_obstack {
  long chunk_size;
  struct __sanitizer__obstack_chunk *chunk;
  char *object_base;
  char *next_free;
  uptr more_fields[7];
};

typedef uptr (*__sanitizer_cookie_io_read)(void *cookie, char *buf, uptr size);
typedef uptr (*__sanitizer_cookie_io_write)(void *cookie, const char *buf,
                                            uptr size);
typedef int (*__sanitizer_cookie_io_seek)(void *cookie, u64 *offset,
                                          int whence);
typedef int (*__sanitizer_cookie_io_close)(void *cookie);

struct __sanitizer_cookie_io_functions_t {
  __sanitizer_cookie_io_read read;
  __sanitizer_cookie_io_write write;
  __sanitizer_cookie_io_seek seek;
  __sanitizer_cookie_io_close close;
};
#endif

#define IOC_NRBITS 8
#define IOC_TYPEBITS 8
#if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) || \
    defined(__sparc__)
#define IOC_SIZEBITS 13
#define IOC_DIRBITS 3
#define IOC_NONE 1U
#define IOC_WRITE 4U
#define IOC_READ 2U
#else
#define IOC_SIZEBITS 14
#define IOC_DIRBITS 2
#define IOC_NONE 0U
#define IOC_WRITE 1U
#define IOC_READ 2U
#endif
#define IOC_NRMASK ((1 << IOC_NRBITS) - 1)
#define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1)
#define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1)
#if defined(IOC_DIRMASK)
#undef IOC_DIRMASK
#endif
#define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1)
#define IOC_NRSHIFT 0
#define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS)
#define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS)
#define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS)
#define EVIOC_EV_MAX 0x1f
#define EVIOC_ABS_MAX 0x3f

#define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK)
#define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK)
#define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)

#if defined(__sparc__)
// In sparc the 14 bits SIZE field overlaps with the
// least significant bit of DIR, so either IOC_READ or
// IOC_WRITE shall be 1 in order to get a non-zero SIZE.
#define IOC_SIZE(nr) \
  ((((((nr) >> 29) & 0x7) & (4U | 2U)) == 0) ? 0 : (((nr) >> 16) & 0x3fff))
#else
#define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)
#endif

  extern unsigned struct_ifreq_sz;
  extern unsigned struct_termios_sz;
  extern unsigned struct_winsize_sz;

#if SANITIZER_LINUX
  extern unsigned struct_arpreq_sz;
  extern unsigned struct_cdrom_msf_sz;
  extern unsigned struct_cdrom_multisession_sz;
  extern unsigned struct_cdrom_read_audio_sz;
  extern unsigned struct_cdrom_subchnl_sz;
  extern unsigned struct_cdrom_ti_sz;
  extern unsigned struct_cdrom_tocentry_sz;
  extern unsigned struct_cdrom_tochdr_sz;
  extern unsigned struct_cdrom_volctrl_sz;
  extern unsigned struct_ff_effect_sz;
  extern unsigned struct_floppy_drive_params_sz;
  extern unsigned struct_floppy_drive_struct_sz;
  extern unsigned struct_floppy_fdc_state_sz;
  extern unsigned struct_floppy_max_errors_sz;
  extern unsigned struct_floppy_raw_cmd_sz;
  extern unsigned struct_floppy_struct_sz;
  extern unsigned struct_floppy_write_errors_sz;
  extern unsigned struct_format_descr_sz;
  extern unsigned struct_hd_driveid_sz;
  extern unsigned struct_hd_geometry_sz;
  extern unsigned struct_input_absinfo_sz;
  extern unsigned struct_input_id_sz;
  extern unsigned struct_mtpos_sz;
  extern unsigned struct_termio_sz;
  extern unsigned struct_vt_consize_sz;
  extern unsigned struct_vt_sizes_sz;
  extern unsigned struct_vt_stat_sz;
#endif  // SANITIZER_LINUX

#if SANITIZER_LINUX || SANITIZER_FREEBSD
  extern unsigned struct_copr_buffer_sz;
  extern unsigned struct_copr_debug_buf_sz;
  extern unsigned struct_copr_msg_sz;
  extern unsigned struct_midi_info_sz;
  extern unsigned struct_mtget_sz;
  extern unsigned struct_mtop_sz;
  extern unsigned struct_rtentry_sz;
  extern unsigned struct_sbi_instrument_sz;
  extern unsigned struct_seq_event_rec_sz;
  extern unsigned struct_synth_info_sz;
  extern unsigned struct_vt_mode_sz;
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD

#if SANITIZER_LINUX && !SANITIZER_ANDROID
  extern unsigned struct_ax25_parms_struct_sz;
  extern unsigned struct_cyclades_monitor_sz;
  extern unsigned struct_input_keymap_entry_sz;
  extern unsigned struct_ipx_config_data_sz;
  extern unsigned struct_kbdiacrs_sz;
  extern unsigned struct_kbentry_sz;
  extern unsigned struct_kbkeycode_sz;
  extern unsigned struct_kbsentry_sz;
  extern unsigned struct_mtconfiginfo_sz;
  extern unsigned struct_nr_parms_struct_sz;
  extern unsigned struct_scc_modem_sz;
  extern unsigned struct_scc_stat_sz;
  extern unsigned struct_serial_multiport_struct_sz;
  extern unsigned struct_serial_struct_sz;
  extern unsigned struct_sockaddr_ax25_sz;
  extern unsigned struct_unimapdesc_sz;
  extern unsigned struct_unimapinit_sz;
#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID

#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
  extern unsigned struct_audio_buf_info_sz;
  extern unsigned struct_ppp_stats_sz;
#endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID

#if !SANITIZER_ANDROID && !SANITIZER_MAC
  extern unsigned struct_sioc_sg_req_sz;
  extern unsigned struct_sioc_vif_req_sz;
#endif

  // ioctl request identifiers

  // A special value to mark ioctls that are not present on the target platform,
  // when it can not be determined without including any system headers.
  extern const unsigned IOCTL_NOT_PRESENT;

  extern unsigned IOCTL_FIOASYNC;
  extern unsigned IOCTL_FIOCLEX;
  extern unsigned IOCTL_FIOGETOWN;
  extern unsigned IOCTL_FIONBIO;
  extern unsigned IOCTL_FIONCLEX;
  extern unsigned IOCTL_FIOSETOWN;
  extern unsigned IOCTL_SIOCADDMULTI;
  extern unsigned IOCTL_SIOCATMARK;
  extern unsigned IOCTL_SIOCDELMULTI;
  extern unsigned IOCTL_SIOCGIFADDR;
  extern unsigned IOCTL_SIOCGIFBRDADDR;
  extern unsigned IOCTL_SIOCGIFCONF;
  extern unsigned IOCTL_SIOCGIFDSTADDR;
  extern unsigned IOCTL_SIOCGIFFLAGS;
  extern unsigned IOCTL_SIOCGIFMETRIC;
  extern unsigned IOCTL_SIOCGIFMTU;
  extern unsigned IOCTL_SIOCGIFNETMASK;
  extern unsigned IOCTL_SIOCGPGRP;
  extern unsigned IOCTL_SIOCSIFADDR;
  extern unsigned IOCTL_SIOCSIFBRDADDR;
  extern unsigned IOCTL_SIOCSIFDSTADDR;
  extern unsigned IOCTL_SIOCSIFFLAGS;
  extern unsigned IOCTL_SIOCSIFMETRIC;
  extern unsigned IOCTL_SIOCSIFMTU;
  extern unsigned IOCTL_SIOCSIFNETMASK;
  extern unsigned IOCTL_SIOCSPGRP;
  extern unsigned IOCTL_TIOCCONS;
  extern unsigned IOCTL_TIOCEXCL;
  extern unsigned IOCTL_TIOCGETD;
  extern unsigned IOCTL_TIOCGPGRP;
  extern unsigned IOCTL_TIOCGWINSZ;
  extern unsigned IOCTL_TIOCMBIC;
  extern unsigned IOCTL_TIOCMBIS;
  extern unsigned IOCTL_TIOCMGET;
  extern unsigned IOCTL_TIOCMSET;
  extern unsigned IOCTL_TIOCNOTTY;
  extern unsigned IOCTL_TIOCNXCL;
  extern unsigned IOCTL_TIOCOUTQ;
  extern unsigned IOCTL_TIOCPKT;
  extern unsigned IOCTL_TIOCSCTTY;
  extern unsigned IOCTL_TIOCSETD;
  extern unsigned IOCTL_TIOCSPGRP;
  extern unsigned IOCTL_TIOCSTI;
  extern unsigned IOCTL_TIOCSWINSZ;
#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
  extern unsigned IOCTL_SIOCGETSGCNT;
  extern unsigned IOCTL_SIOCGETVIFCNT;
#endif
#if SANITIZER_LINUX
  extern unsigned IOCTL_EVIOCGABS;
  extern unsigned IOCTL_EVIOCGBIT;
  extern unsigned IOCTL_EVIOCGEFFECTS;
  extern unsigned IOCTL_EVIOCGID;
  extern unsigned IOCTL_EVIOCGKEY;
  extern unsigned IOCTL_EVIOCGKEYCODE;
  extern unsigned IOCTL_EVIOCGLED;
  extern unsigned IOCTL_EVIOCGNAME;
  extern unsigned IOCTL_EVIOCGPHYS;
  extern unsigned IOCTL_EVIOCGRAB;
  extern unsigned IOCTL_EVIOCGREP;
  extern unsigned IOCTL_EVIOCGSND;
  extern unsigned IOCTL_EVIOCGSW;
  extern unsigned IOCTL_EVIOCGUNIQ;
  extern unsigned IOCTL_EVIOCGVERSION;
  extern unsigned IOCTL_EVIOCRMFF;
  extern unsigned IOCTL_EVIOCSABS;
  extern unsigned IOCTL_EVIOCSFF;
  extern unsigned IOCTL_EVIOCSKEYCODE;
  extern unsigned IOCTL_EVIOCSREP;
  extern unsigned IOCTL_BLKFLSBUF;
  extern unsigned IOCTL_BLKGETSIZE;
  extern unsigned IOCTL_BLKRAGET;
  extern unsigned IOCTL_BLKRASET;
  extern unsigned IOCTL_BLKROGET;
  extern unsigned IOCTL_BLKROSET;
  extern unsigned IOCTL_BLKRRPART;
  extern unsigned IOCTL_CDROMAUDIOBUFSIZ;
  extern unsigned IOCTL_CDROMEJECT;
  extern unsigned IOCTL_CDROMEJECT_SW;
  extern unsigned IOCTL_CDROMMULTISESSION;
  extern unsigned IOCTL_CDROMPAUSE;
  extern unsigned IOCTL_CDROMPLAYMSF;
  extern unsigned IOCTL_CDROMPLAYTRKIND;
  extern unsigned IOCTL_CDROMREADAUDIO;
  extern unsigned IOCTL_CDROMREADCOOKED;
  extern unsigned IOCTL_CDROMREADMODE1;
  extern unsigned IOCTL_CDROMREADMODE2;
  extern unsigned IOCTL_CDROMREADRAW;
  extern unsigned IOCTL_CDROMREADTOCENTRY;
  extern unsigned IOCTL_CDROMREADTOCHDR;
  extern unsigned IOCTL_CDROMRESET;
  extern unsigned IOCTL_CDROMRESUME;
  extern unsigned IOCTL_CDROMSEEK;
  extern unsigned IOCTL_CDROMSTART;
  extern unsigned IOCTL_CDROMSTOP;
  extern unsigned IOCTL_CDROMSUBCHNL;
  extern unsigned IOCTL_CDROMVOLCTRL;
  extern unsigned IOCTL_CDROMVOLREAD;
  extern unsigned IOCTL_CDROM_GET_UPC;
  extern unsigned IOCTL_FDCLRPRM;
  extern unsigned IOCTL_FDDEFPRM;
  extern unsigned IOCTL_FDFLUSH;
  extern unsigned IOCTL_FDFMTBEG;
  extern unsigned IOCTL_FDFMTEND;
  extern unsigned IOCTL_FDFMTTRK;
  extern unsigned IOCTL_FDGETDRVPRM;
  extern unsigned IOCTL_FDGETDRVSTAT;
  extern unsigned IOCTL_FDGETDRVTYP;
  extern unsigned IOCTL_FDGETFDCSTAT;
  extern unsigned IOCTL_FDGETMAXERRS;
  extern unsigned IOCTL_FDGETPRM;
  extern unsigned IOCTL_FDMSGOFF;
  extern unsigned IOCTL_FDMSGON;
  extern unsigned IOCTL_FDPOLLDRVSTAT;
  extern unsigned IOCTL_FDRAWCMD;
  extern unsigned IOCTL_FDRESET;
  extern unsigned IOCTL_FDSETDRVPRM;
  extern unsigned IOCTL_FDSETEMSGTRESH;
  extern unsigned IOCTL_FDSETMAXERRS;
  extern unsigned IOCTL_FDSETPRM;
  extern unsigned IOCTL_FDTWADDLE;
  extern unsigned IOCTL_FDWERRORCLR;
  extern unsigned IOCTL_FDWERRORGET;
  extern unsigned IOCTL_HDIO_DRIVE_CMD;
  extern unsigned IOCTL_HDIO_GETGEO;
  extern unsigned IOCTL_HDIO_GET_32BIT;
  extern unsigned IOCTL_HDIO_GET_DMA;
  extern unsigned IOCTL_HDIO_GET_IDENTITY;
  extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS;
  extern unsigned IOCTL_HDIO_GET_MULTCOUNT;
  extern unsigned IOCTL_HDIO_GET_NOWERR;
  extern unsigned IOCTL_HDIO_GET_UNMASKINTR;
  extern unsigned IOCTL_HDIO_SET_32BIT;
  extern unsigned IOCTL_HDIO_SET_DMA;
  extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS;
  extern unsigned IOCTL_HDIO_SET_MULTCOUNT;
  extern unsigned IOCTL_HDIO_SET_NOWERR;
  extern unsigned IOCTL_HDIO_SET_UNMASKINTR;
  extern unsigned IOCTL_MTIOCPOS;
  extern unsigned IOCTL_PPPIOCGASYNCMAP;
  extern unsigned IOCTL_PPPIOCGDEBUG;
  extern unsigned IOCTL_PPPIOCGFLAGS;
  extern unsigned IOCTL_PPPIOCGUNIT;
  extern unsigned IOCTL_PPPIOCGXASYNCMAP;
  extern unsigned IOCTL_PPPIOCSASYNCMAP;
  extern unsigned IOCTL_PPPIOCSDEBUG;
  extern unsigned IOCTL_PPPIOCSFLAGS;
  extern unsigned IOCTL_PPPIOCSMAXCID;
  extern unsigned IOCTL_PPPIOCSMRU;
  extern unsigned IOCTL_PPPIOCSXASYNCMAP;
  extern unsigned IOCTL_SIOCDARP;
  extern unsigned IOCTL_SIOCDRARP;
  extern unsigned IOCTL_SIOCGARP;
  extern unsigned IOCTL_SIOCGIFENCAP;
  extern unsigned IOCTL_SIOCGIFHWADDR;
  extern unsigned IOCTL_SIOCGIFMAP;
  extern unsigned IOCTL_SIOCGIFMEM;
  extern unsigned IOCTL_SIOCGIFNAME;
  extern unsigned IOCTL_SIOCGIFSLAVE;
  extern unsigned IOCTL_SIOCGRARP;
  extern unsigned IOCTL_SIOCGSTAMP;
  extern unsigned IOCTL_SIOCSARP;
  extern unsigned IOCTL_SIOCSIFENCAP;
  extern unsigned IOCTL_SIOCSIFHWADDR;
  extern unsigned IOCTL_SIOCSIFLINK;
  extern unsigned IOCTL_SIOCSIFMAP;
  extern unsigned IOCTL_SIOCSIFMEM;
  extern unsigned IOCTL_SIOCSIFSLAVE;
  extern unsigned IOCTL_SIOCSRARP;
  extern unsigned IOCTL_SNDCTL_COPR_HALT;
  extern unsigned IOCTL_SNDCTL_COPR_LOAD;
  extern unsigned IOCTL_SNDCTL_COPR_RCODE;
  extern unsigned IOCTL_SNDCTL_COPR_RCVMSG;
  extern unsigned IOCTL_SNDCTL_COPR_RDATA;
  extern unsigned IOCTL_SNDCTL_COPR_RESET;
  extern unsigned IOCTL_SNDCTL_COPR_RUN;
  extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;
  extern unsigned IOCTL_SNDCTL_COPR_WCODE;
  extern unsigned IOCTL_SNDCTL_COPR_WDATA;
  extern unsigned IOCTL_TCFLSH;
  extern unsigned IOCTL_TCGETA;
  extern unsigned IOCTL_TCGETS;
  extern unsigned IOCTL_TCSBRK;
  extern unsigned IOCTL_TCSBRKP;
  extern unsigned IOCTL_TCSETA;
  extern unsigned IOCTL_TCSETAF;
  extern unsigned IOCTL_TCSETAW;
  extern unsigned IOCTL_TCSETS;
  extern unsigned IOCTL_TCSETSF;
  extern unsigned IOCTL_TCSETSW;
  extern unsigned IOCTL_TCXONC;
  extern unsigned IOCTL_TIOCGLCKTRMIOS;
  extern unsigned IOCTL_TIOCGSOFTCAR;
  extern unsigned IOCTL_TIOCINQ;
  extern unsigned IOCTL_TIOCLINUX;
  extern unsigned IOCTL_TIOCSERCONFIG;
  extern unsigned IOCTL_TIOCSERGETLSR;
  extern unsigned IOCTL_TIOCSERGWILD;
  extern unsigned IOCTL_TIOCSERSWILD;
  extern unsigned IOCTL_TIOCSLCKTRMIOS;
  extern unsigned IOCTL_TIOCSSOFTCAR;
  extern unsigned IOCTL_VT_DISALLOCATE;
  extern unsigned IOCTL_VT_GETSTATE;
  extern unsigned IOCTL_VT_RESIZE;
  extern unsigned IOCTL_VT_RESIZEX;
  extern unsigned IOCTL_VT_SENDSIG;
#endif  // SANITIZER_LINUX
#if SANITIZER_LINUX || SANITIZER_FREEBSD
  extern unsigned IOCTL_MTIOCGET;
  extern unsigned IOCTL_MTIOCTOP;
  extern unsigned IOCTL_SIOCADDRT;
  extern unsigned IOCTL_SIOCDELRT;
  extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE;
  extern unsigned IOCTL_SNDCTL_DSP_GETFMTS;
  extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK;
  extern unsigned IOCTL_SNDCTL_DSP_POST;
  extern unsigned IOCTL_SNDCTL_DSP_RESET;
  extern unsigned IOCTL_SNDCTL_DSP_SETFMT;
  extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT;
  extern unsigned IOCTL_SNDCTL_DSP_SPEED;
  extern unsigned IOCTL_SNDCTL_DSP_STEREO;
  extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE;
  extern unsigned IOCTL_SNDCTL_DSP_SYNC;
  extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE;
  extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR;
  extern unsigned IOCTL_SNDCTL_MIDI_INFO;
  extern unsigned IOCTL_SNDCTL_MIDI_PRETIME;
  extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE;
  extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT;
  extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT;
  extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS;
  extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS;
  extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND;
  extern unsigned IOCTL_SNDCTL_SEQ_PANIC;
  extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE;
  extern unsigned IOCTL_SNDCTL_SEQ_RESET;
  extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES;
  extern unsigned IOCTL_SNDCTL_SEQ_SYNC;
  extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI;
  extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD;
  extern unsigned IOCTL_SNDCTL_SYNTH_INFO;
  extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL;
  extern unsigned IOCTL_SNDCTL_TMR_CONTINUE;
  extern unsigned IOCTL_SNDCTL_TMR_METRONOME;
  extern unsigned IOCTL_SNDCTL_TMR_SELECT;
  extern unsigned IOCTL_SNDCTL_TMR_SOURCE;
  extern unsigned IOCTL_SNDCTL_TMR_START;
  extern unsigned IOCTL_SNDCTL_TMR_STOP;
  extern unsigned IOCTL_SNDCTL_TMR_TEMPO;
  extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE;
  extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM;
  extern unsigned IOCTL_SOUND_MIXER_READ_BASS;
  extern unsigned IOCTL_SOUND_MIXER_READ_CAPS;
  extern unsigned IOCTL_SOUND_MIXER_READ_CD;
  extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK;
  extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE;
  extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN;
  extern unsigned IOCTL_SOUND_MIXER_READ_IMIX;
  extern unsigned IOCTL_SOUND_MIXER_READ_LINE1;
  extern unsigned IOCTL_SOUND_MIXER_READ_LINE2;
  extern unsigned IOCTL_SOUND_MIXER_READ_LINE3;
  extern unsigned IOCTL_SOUND_MIXER_READ_LINE;
  extern unsigned IOCTL_SOUND_MIXER_READ_LOUD;
  extern unsigned IOCTL_SOUND_MIXER_READ_MIC;
  extern unsigned IOCTL_SOUND_MIXER_READ_MUTE;
  extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN;
  extern unsigned IOCTL_SOUND_MIXER_READ_PCM;
  extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV;
  extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK;
  extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC;
  extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER;
  extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS;
  extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH;
  extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE;
  extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_CD;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE;
  extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME;
  extern unsigned IOCTL_SOUND_PCM_READ_BITS;
  extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS;
  extern unsigned IOCTL_SOUND_PCM_READ_FILTER;
  extern unsigned IOCTL_SOUND_PCM_READ_RATE;
  extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS;
  extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER;
  extern unsigned IOCTL_VT_ACTIVATE;
  extern unsigned IOCTL_VT_GETMODE;
  extern unsigned IOCTL_VT_OPENQRY;
  extern unsigned IOCTL_VT_RELDISP;
  extern unsigned IOCTL_VT_SETMODE;
  extern unsigned IOCTL_VT_WAITACTIVE;
#endif  // SANITIZER_LINUX || SANITIZER_FREEBSD

#if SANITIZER_LINUX && !SANITIZER_ANDROID
  extern unsigned IOCTL_CYGETDEFTHRESH;
  extern unsigned IOCTL_CYGETDEFTIMEOUT;
  extern unsigned IOCTL_CYGETMON;
  extern unsigned IOCTL_CYGETTHRESH;
  extern unsigned IOCTL_CYGETTIMEOUT;
  extern unsigned IOCTL_CYSETDEFTHRESH;
  extern unsigned IOCTL_CYSETDEFTIMEOUT;
  extern unsigned IOCTL_CYSETTHRESH;
  extern unsigned IOCTL_CYSETTIMEOUT;
  extern unsigned IOCTL_EQL_EMANCIPATE;
  extern unsigned IOCTL_EQL_ENSLAVE;
  extern unsigned IOCTL_EQL_GETMASTRCFG;
  extern unsigned IOCTL_EQL_GETSLAVECFG;
  extern unsigned IOCTL_EQL_SETMASTRCFG;
  extern unsigned IOCTL_EQL_SETSLAVECFG;
  extern unsigned IOCTL_EVIOCGKEYCODE_V2;
  extern unsigned IOCTL_EVIOCGPROP;
  extern unsigned IOCTL_EVIOCSKEYCODE_V2;
  extern unsigned IOCTL_FS_IOC_GETFLAGS;
  extern unsigned IOCTL_FS_IOC_GETVERSION;
  extern unsigned IOCTL_FS_IOC_SETFLAGS;
  extern unsigned IOCTL_FS_IOC_SETVERSION;
  extern unsigned IOCTL_GIO_CMAP;
  extern unsigned IOCTL_GIO_FONT;
  extern unsigned IOCTL_GIO_UNIMAP;
  extern unsigned IOCTL_GIO_UNISCRNMAP;
  extern unsigned IOCTL_KDADDIO;
  extern unsigned IOCTL_KDDELIO;
  extern unsigned IOCTL_KDGETKEYCODE;
  extern unsigned IOCTL_KDGKBDIACR;
  extern unsigned IOCTL_KDGKBENT;
  extern unsigned IOCTL_KDGKBLED;
  extern unsigned IOCTL_KDGKBMETA;
  extern unsigned IOCTL_KDGKBSENT;
  extern unsigned IOCTL_KDMAPDISP;
  extern unsigned IOCTL_KDSETKEYCODE;
  extern unsigned IOCTL_KDSIGACCEPT;
  extern unsigned IOCTL_KDSKBDIACR;
  extern unsigned IOCTL_KDSKBENT;
  extern unsigned IOCTL_KDSKBLED;
  extern unsigned IOCTL_KDSKBMETA;
  extern unsigned IOCTL_KDSKBSENT;
  extern unsigned IOCTL_KDUNMAPDISP;
  extern unsigned IOCTL_LPABORT;
  extern unsigned IOCTL_LPABORTOPEN;
  extern unsigned IOCTL_LPCAREFUL;
  extern unsigned IOCTL_LPCHAR;
  extern unsigned IOCTL_LPGETIRQ;
  extern unsigned IOCTL_LPGETSTATUS;
  extern unsigned IOCTL_LPRESET;
  extern unsigned IOCTL_LPSETIRQ;
  extern unsigned IOCTL_LPTIME;
  extern unsigned IOCTL_LPWAIT;
  extern unsigned IOCTL_MTIOCGETCONFIG;
  extern unsigned IOCTL_MTIOCSETCONFIG;
  extern unsigned IOCTL_PIO_CMAP;
  extern unsigned IOCTL_PIO_FONT;
  extern unsigned IOCTL_PIO_UNIMAP;
  extern unsigned IOCTL_PIO_UNIMAPCLR;
  extern unsigned IOCTL_PIO_UNISCRNMAP;
  extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN;
  extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST;
  extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE;
  extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE;
  extern unsigned IOCTL_SIOCAIPXITFCRT;
  extern unsigned IOCTL_SIOCAIPXPRISLT;
  extern unsigned IOCTL_SIOCAX25ADDUID;
  extern unsigned IOCTL_SIOCAX25DELUID;
  extern unsigned IOCTL_SIOCAX25GETPARMS;
  extern unsigned IOCTL_SIOCAX25GETUID;
  extern unsigned IOCTL_SIOCAX25NOUID;
  extern unsigned IOCTL_SIOCAX25SETPARMS;
  extern unsigned IOCTL_SIOCDEVPLIP;
  extern unsigned IOCTL_SIOCIPXCFGDATA;
  extern unsigned IOCTL_SIOCNRDECOBS;
  extern unsigned IOCTL_SIOCNRGETPARMS;
  extern unsigned IOCTL_SIOCNRRTCTL;
  extern unsigned IOCTL_SIOCNRSETPARMS;
  extern unsigned IOCTL_SNDCTL_DSP_GETISPACE;
  extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE;
  extern unsigned IOCTL_TIOCGSERIAL;
  extern unsigned IOCTL_TIOCSERGETMULTI;
  extern unsigned IOCTL_TIOCSERSETMULTI;
  extern unsigned IOCTL_TIOCSSERIAL;
#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID

#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
  extern unsigned IOCTL_GIO_SCRNMAP;
  extern unsigned IOCTL_KDDISABIO;
  extern unsigned IOCTL_KDENABIO;
  extern unsigned IOCTL_KDGETLED;
  extern unsigned IOCTL_KDGETMODE;
  extern unsigned IOCTL_KDGKBMODE;
  extern unsigned IOCTL_KDGKBTYPE;
  extern unsigned IOCTL_KDMKTONE;
  extern unsigned IOCTL_KDSETLED;
  extern unsigned IOCTL_KDSETMODE;
  extern unsigned IOCTL_KDSKBMODE;
  extern unsigned IOCTL_KIOCSOUND;
  extern unsigned IOCTL_PIO_SCRNMAP;
#endif

  extern const int si_SEGV_MAPERR;
  extern const int si_SEGV_ACCERR;
}  // namespace __sanitizer

#define CHECK_TYPE_SIZE(TYPE) \
  COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))

#define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
  COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *) NULL)->MEMBER) == \
                 sizeof(((CLASS *) NULL)->MEMBER));                \
  COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) ==          \
                 offsetof(CLASS, MEMBER))

// For sigaction, which is a function and struct at the same time,
// and thus requires explicit "struct" in sizeof() expression.
#define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
  COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *) NULL)->MEMBER) == \
                 sizeof(((struct CLASS *) NULL)->MEMBER));                \
  COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) ==          \
                 offsetof(struct CLASS, MEMBER))

#endif  // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_MAC

#endif
