19358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov//===-- sanitizer_platform_limits_posix.h ---------------------------------===//
278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//                     The LLVM Compiler Infrastructure
478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
578c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov// This file is distributed under the University of Illinois Open Source
678c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov// License. See LICENSE.TXT for details.
778c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//===----------------------------------------------------------------------===//
978c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
109358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov// This file is a part of Sanitizer common code.
1178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//
129358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov// Sizes and layouts of platform-specific POSIX data structures.
1378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov//===----------------------------------------------------------------------===//
1478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
159358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H
169358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov#define SANITIZER_PLATFORM_LIMITS_POSIX_H
1778c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
1870db33e143303752c7fe8800d15b5b31066b1e0dSergey Matveev#include "sanitizer_internal_defs.h"
1924e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#include "sanitizer_platform.h"
2024e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov
219358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanovnamespace __sanitizer {
2278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_utsname_sz;
2378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_stat_sz;
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_FREEBSD && !SANITIZER_IOS
2578c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_stat64_sz;
26b8a141f3783d796eabf45fabff82f3e08244e338Alexander Potapenko#endif
279358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  extern unsigned struct_rusage_sz;
28897a4ae31f5c55255c78854b69b4cd4a4e3c7c39Evgeniy Stepanov  extern unsigned siginfo_t_sz;
29e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned struct_itimerval_sz;
30e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned pthread_t_sz;
315e2d3776a314629680921abd1d55d89d95a2da90Alexey Samsonov  extern unsigned pthread_cond_t_sz;
32745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned pid_t_sz;
33745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned timeval_sz;
34745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned uid_t_sz;
352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned gid_t_sz;
3657a1095fca7b95db8a0ec87fce7a6f0e331a5b99Evgeniy Stepanov  extern unsigned mbstate_t_sz;
37639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_timezone_sz;
38639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_tms_sz;
39639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_itimerspec_sz;
40639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_sigevent_sz;
41639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_sched_param_sz;
421bb2229028dd78280d24c26b9efbe8476d966e05Evgeniy Stepanov  extern unsigned struct_statfs64_sz;
434fb04a8445076debf51d220f75211584b89043c8Evgeniy Stepanov
444fb04a8445076debf51d220f75211584b89043c8Evgeniy Stepanov#if !SANITIZER_ANDROID
455d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  extern unsigned struct_statfs_sz;
465d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  extern unsigned struct_sockaddr_sz;
47072770202bb1002172abe9a4b1eeb7f2d2fb004fEvgeniy Stepanov  extern unsigned ucontext_t_sz;
484fb04a8445076debf51d220f75211584b89043c8Evgeniy Stepanov#endif // !SANITIZER_ANDROID
499358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov
5024e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX
51e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov
52e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov#if defined(__x86_64__)
53e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 144;
54e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 0;
55e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov#elif defined(__i386__)
56e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 64;
57e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 96;
58f17dd743288942a36f82e09706f18477b27f603dEvgeniy Stepanov#elif defined(__arm__)
59f17dd743288942a36f82e09706f18477b27f603dEvgeniy Stepanov  const unsigned struct_kernel_stat_sz = 64;
60f17dd743288942a36f82e09706f18477b27f603dEvgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 104;
612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif defined(__aarch64__)
622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct_kernel_stat_sz = 128;
632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct_kernel_stat64_sz = 104;
640d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#elif defined(__powerpc__) && !defined(__powerpc64__)
650d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 72;
660d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 104;
670d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#elif defined(__powerpc64__)
680d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 144;
690d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 104;
705d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#elif defined(__mips__)
715d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  #if SANITIZER_WORDSIZE == 64
725d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  const unsigned struct_kernel_stat_sz = 216;
735d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  #else
745d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  const unsigned struct_kernel_stat_sz = 144;
755d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  #endif
765d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  const unsigned struct_kernel_stat64_sz = 104;
77e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov#endif
78d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov  struct __sanitizer_perf_event_attr {
79d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov    unsigned type;
80d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov    unsigned size;
81d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov    // More fields that vary with the kernel version.
82d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov  };
83e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov
8478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_epoll_event_sz;
85359d7fc7daf099ab8ef9a860564542d2581544aaEvgeniy Stepanov  extern unsigned struct_sysinfo_sz;
86639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned __user_cap_header_struct_sz;
87639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned __user_cap_data_struct_sz;
8825ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_new_utsname_sz;
8925ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_old_utsname_sz;
9025ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_oldold_utsname_sz;
9125ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov
92639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long);
932d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX
942d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
952d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
962d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if defined(__powerpc64__)
982d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct___old_kernel_stat_sz = 0;
992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
1002d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct___old_kernel_stat_sz = 32;
1012d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
1022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1032d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_rlimit_sz;
1042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_utimbuf_sz;
1052d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_timespec_sz;
106639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov
107bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  struct __sanitizer_iocb {
108bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_data;
109bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u32   aio_key_or_aio_reserved1; // Simply crazy.
110bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u32   aio_reserved1_or_aio_key; // Luckily, we don't need these.
111bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u16   aio_lio_opcode;
112bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    s16   aio_reqprio;
113bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u32   aio_fildes;
114bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_buf;
115bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_nbytes;
116bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    s64   aio_offset;
117bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_reserved2;
118c50f7962c823506109b6307209411b36e0d46abdEvgeniy Stepanov    u64   aio_reserved3;
119bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  };
120bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
1212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_io_event {
1222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 data;
1232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 obj;
1242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 res;
1252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 res2;
1262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
1272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
128e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned iocb_cmd_pread = 0;
129e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned iocb_cmd_pwrite = 1;
1302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned iocb_cmd_preadv = 7;
1312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned iocb_cmd_pwritev = 8;
132bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
133639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  struct __sanitizer___sysctl_args {
134639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    int *name;
135639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    int nlen;
136639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    void *oldval;
137639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    uptr *oldlenp;
138639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    void *newval;
139639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    uptr newlen;
1409a4a1590169e42076aee67a6fd472ece77b9b484Evgeniy Stepanov    unsigned long ___unused[4];
141639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  };
1422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned old_sigset_t_sz = sizeof(unsigned long);
1442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
1452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID
1472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_mallinfo {
1482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr v[10];
1492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
1502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
15178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
15224e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
1532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_mallinfo {
1542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int v[10];
1552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
1562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
15725ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_ustat_sz;
158b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov  extern unsigned struct_rlimit64_sz;
1590489e113d3e9fa9379fa38bc1a50f81414feab48Evgeniy Stepanov  extern unsigned struct_statvfs64_sz;
160f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov
161f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  struct __sanitizer_ipc_perm {
162f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int __key;
163f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int uid;
164f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int gid;
165f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int cuid;
166f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int cgid;
1677f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#ifdef __powerpc__
1680d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov    unsigned mode;
1690d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov    unsigned __seq;
1707f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused1;
1717f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused2;
1725d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#elif defined(__mips__)
1735d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines    unsigned int mode;
1745d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines    unsigned short __seq;
1755d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines    unsigned short __pad1;
1765d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines    unsigned long __unused1;
1775d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines    unsigned long __unused2;
1780d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#else
179f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short mode;
180f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short __pad1;
181f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short __seq;
182f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short __pad2;
1837f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#if defined(__x86_64__) && !defined(_LP64)
1847f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused1;
1857f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused2;
1867f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#else
1877f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    unsigned long __unused1;
1887f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    unsigned long __unused2;
1897f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#endif
1900d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#endif
191f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  };
192f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov
193f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  struct __sanitizer_shmid_ds {
194f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    __sanitizer_ipc_perm shm_perm;
1950d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #ifndef __powerpc__
196f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_segsz;
1977f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling  #elif !defined(__powerpc64__)
1987f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    uptr __unused0;
1990d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #endif
2002d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #if defined(__x86_64__) && !defined(_LP64)
2012d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_atime;
2022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_dtime;
2032d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_ctime;
2042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #else
205f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_atime;
2065d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  #if !defined(_LP64) && !defined(__mips__)
207f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused1;
208f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  #endif
209f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_dtime;
2105d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  #if !defined(_LP64) && !defined(__mips__)
211f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused2;
212f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  #endif
213f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_ctime;
2145d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  #if !defined(_LP64) && !defined(__mips__)
215f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused3;
216f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  #endif
2172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #endif
2180d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #ifdef __powerpc__
2190d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov    uptr shm_segsz;
2200d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #endif
221f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int shm_cpid;
222f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int shm_lpid;
2232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #if defined(__x86_64__) && !defined(_LP64)
2242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_nattch;
2252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 __unused4;
2262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 __unused5;
2272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #else
228f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_nattch;
229f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused4;
230f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused5;
2312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #endif
2322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
2332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif SANITIZER_FREEBSD
2342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_ipc_perm {
2352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int cuid;
2362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int cgid;
2372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int uid;
2382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int gid;
2392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short mode;
2402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short seq;
2412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    long key;
242f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  };
2432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
2442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_shmid_ds {
2452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_ipc_perm shm_perm;
2462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_segsz;
2472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int shm_lpid;
2482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int shm_cpid;
2492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int shm_nattch;
2502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_atime;
2512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_dtime;
2522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_ctime;
2532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
2542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
2552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
2562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
2572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_msqid_ds_sz;
2582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_mq_attr_sz;
2592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_timex_sz;
2602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_statvfs_sz;
2612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
262b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov
2639666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  struct __sanitizer_iovec {
2642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *iov_base;
2659666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr iov_len;
2669666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  };
2679666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov
2682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_ANDROID
2692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_ifaddrs {
2702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    struct __sanitizer_ifaddrs *ifa_next;
2712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *ifa_name;
2722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int ifa_flags;
2732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_addr;    // (struct sockaddr *)
2742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_netmask; // (struct sockaddr *)
2752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // This is a union on Linux.
2762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# ifdef ifa_dstaddr
2772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# undef ifa_dstaddr
2782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# endif
2792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_dstaddr; // (struct sockaddr *)
2802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_data;
2812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
2822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // !SANITIZER_ANDROID
2832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
2848be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov#if SANITIZER_MAC
2858be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov  typedef unsigned long __sanitizer_pthread_key_t;
2868be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov#else
287737da2f031badfad5bc5b762cc50d789fbcb6ef8Evgeniy Stepanov  typedef unsigned __sanitizer_pthread_key_t;
2888be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov#endif
289737da2f031badfad5bc5b762cc50d789fbcb6ef8Evgeniy Stepanov
2902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX && !SANITIZER_ANDROID
2912d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
2922d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_XDR {
2932d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int x_op;
2942d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *x_ops;
2952d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr x_public;
2962d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr x_private;
2972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr x_base;
2982d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned x_handy;
2992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3002d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3012d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const int __sanitizer_XDR_ENCODE = 0;
3022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const int __sanitizer_XDR_DECODE = 1;
3032d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const int __sanitizer_XDR_FREE = 2;
3042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3052d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3062d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_passwd {
3072d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_name;
3082d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_passwd;
3092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int pw_uid;
3102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int pw_gid;
3112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_MAC || SANITIZER_FREEBSD
3122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    long pw_change;
3132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_class;
3142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_ANDROID
3162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_gecos;
3172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_dir;
3192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_shell;
3202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_MAC || SANITIZER_FREEBSD
3212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    long pw_expire;
3222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
3242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int pw_fields;
3252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_group {
3292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *gr_name;
3302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *gr_passwd;
3312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int gr_gid;
3322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char **gr_mem;
3332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if defined(__x86_64__) && !defined(_LP64)
3362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long long __sanitizer_time_t;
3372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
3382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long __sanitizer_time_t;
3392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_timeb {
3422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_time_t time;
3432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short millitm;
3442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    short timezone;
3452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    short dstflag;
3462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
348369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov  struct __sanitizer_ether_addr {
349369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov    u8 octet[6];
350369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov  };
351369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov
352cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov  struct __sanitizer_tm {
353cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_sec;
354cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_min;
355cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_hour;
356cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_mday;
357cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_mon;
358cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_year;
359cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_wday;
360cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_yday;
361cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_isdst;
362cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    long int tm_gmtoff;
363cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    const char *tm_zone;
364cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov  };
365cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov
3664d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov#if SANITIZER_LINUX
3674d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov  struct __sanitizer_mntent {
3684d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_fsname;
3694d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_dir;
3704d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_type;
3714d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_opts;
3724d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    int mnt_freq;
3734d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    int mnt_passno;
3744d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov  };
3754d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov#endif
3764d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov
3772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
378e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  struct __sanitizer_msghdr {
379e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    void *msg_name;
380e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned msg_namelen;
381e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    struct __sanitizer_iovec *msg_iov;
382e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned msg_iovlen;
383e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    void *msg_control;
384e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned msg_controllen;
385e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    int msg_flags;
386e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  };
387e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  struct __sanitizer_cmsghdr {
388e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned cmsg_len;
389e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    int cmsg_level;
390e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    int cmsg_type;
391e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  };
392e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov#else
3939666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  struct __sanitizer_msghdr {
3949666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    void *msg_name;
3959666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    unsigned msg_namelen;
3969666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    struct __sanitizer_iovec *msg_iov;
3979666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr msg_iovlen;
3989666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    void *msg_control;
3999666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr msg_controllen;
4009666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    int msg_flags;
4019666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  };
4029666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  struct __sanitizer_cmsghdr {
4039666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr cmsg_len;
4049666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    int cmsg_level;
4059666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    int cmsg_type;
4069666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  };
407e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov#endif
40810fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov
409a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#if SANITIZER_MAC
410a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent {
411b6bde4d2bc5231cd1b38ff92e51afb3f6e157386Alexey Samsonov    unsigned long long d_ino;
412b6bde4d2bc5231cd1b38ff92e51afb3f6e157386Alexey Samsonov    unsigned long long d_seekoff;
413a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned short d_reclen;
414a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    // more fields that we don't care about
415a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  };
4162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif SANITIZER_FREEBSD
4172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_dirent {
4182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int d_fileno;
4192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short d_reclen;
4202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // more fields that we don't care about
4212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
422e041c6024b3ebf1365c0f99732fc69c607577571Kostya Serebryany#elif SANITIZER_ANDROID || defined(__x86_64__)
423a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent {
424a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned long long d_ino;
425a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned long long d_off;
426a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned short d_reclen;
427a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    // more fields that we don't care about
428a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  };
429a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#else
430a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent {
431a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    uptr d_ino;
432a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    uptr d_off;
433a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned short d_reclen;
434a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    // more fields that we don't care about
435a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  };
436a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#endif
437a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov
438a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
439a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent64 {
4405a482cd54a75bf821fb8c61f2fe4e84ae9efb714Chandler Carruth    unsigned long long d_ino;
4415a482cd54a75bf821fb8c61f2fe4e84ae9efb714Chandler Carruth    unsigned long long d_off;
442a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned short d_reclen;
443a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    // more fields that we don't care about
444a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  };
445a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#endif
446a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov
4472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 'clock_t' is 32 bits wide on x64 FreeBSD
4482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
4492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef int __sanitizer_clock_t;
4502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif defined(__x86_64__) && !defined(_LP64)
4512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long long __sanitizer_clock_t;
4522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
4532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long __sanitizer_clock_t;
4542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
4552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
4565d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#if SANITIZER_LINUX
4575d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  typedef int __sanitizer_clockid_t;
4585d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif
4595d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines
4602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
4615d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__)\
4625d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines                   || defined(__mips__)
463a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned __sanitizer___kernel_uid_t;
464a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned __sanitizer___kernel_gid_t;
465a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov#else
46685626e8127d1f795a447c1bacb5a2606c7b954d9Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_uid_t;
467a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_gid_t;
4687f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#endif
4697f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#if defined(__x86_64__) && !defined(_LP64)
4707f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling  typedef long long __sanitizer___kernel_off_t;
4717f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#else
472e041c6024b3ebf1365c0f99732fc69c607577571Kostya Serebryany  typedef long __sanitizer___kernel_off_t;
473a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov#endif
4740d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov
4755d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#if defined(__powerpc__) || defined(__aarch64__) || defined(__mips__)
4760d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  typedef unsigned int __sanitizer___kernel_old_uid_t;
4770d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  typedef unsigned int __sanitizer___kernel_old_gid_t;
4780d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#else
479a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_old_uid_t;
480a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_old_gid_t;
4810d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#endif
4820d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov
483a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef long long __sanitizer___kernel_loff_t;
484a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef struct {
485a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov    unsigned long fds_bits[1024 / (8 * sizeof(long))];
486a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  } __sanitizer___kernel_fd_set;
487a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov#endif
488a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov
48910fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  // This thing depends on the platform. We are only interested in the upper
49010fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  // limit. Verified with a compiler assert in .cc.
49110fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  const int pthread_attr_t_max_sz = 128;
49210fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  union __sanitizer_pthread_attr_t {
4930ecc4379bbb04f1d03ceb58f6a0751790fb17c75Evgeniy Stepanov    char size[pthread_attr_t_max_sz]; // NOLINT
49410fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov    void *align;
49510fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  };
49606658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov
497b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#if SANITIZER_ANDROID
498b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  typedef unsigned long __sanitizer_sigset_t;
499b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#elif SANITIZER_MAC
500b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  typedef unsigned __sanitizer_sigset_t;
501b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#elif SANITIZER_LINUX
502b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  struct __sanitizer_sigset_t {
503b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    // The size is determined by looking at sizeof of real sigset_t on linux.
504b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    uptr val[128 / sizeof(uptr)];
505b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  };
5062d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif SANITIZER_FREEBSD
5072d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_sigset_t {
5082d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines     // uint32_t * 4
5092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines     unsigned int __bits[4];
5102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
511b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#endif
51206658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov
5132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
514b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  struct __sanitizer_sigaction {
5155d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#if defined(__mips__) && !SANITIZER_FREEBSD
5165d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines    unsigned int sa_flags;
5175d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif
518b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    union {
5192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void (*sigaction)(int sig, void *siginfo, void *uctx);
5202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void (*handler)(int sig);
521b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    };
5222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
5232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int sa_flags;
5242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_sigset_t sa_mask;
5252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
526b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    __sanitizer_sigset_t sa_mask;
5275d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#ifndef __mips__
528b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    int sa_flags;
5292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
5305d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif
531b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#if SANITIZER_LINUX
532b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    void (*sa_restorer)();
533b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#endif
5345d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#if defined(__mips__) && (SANITIZER_WORDSIZE == 32)
5355d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines    int sa_resv[1];
5365d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif
53706658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov  };
53806658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov
5392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
5402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t;
5412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
5425f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  struct __sanitizer_kernel_sigset_t {
5435f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    u8 sig[8];
5445f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  };
5452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
5465f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov
5472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
5485f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  struct __sanitizer_kernel_sigaction_t {
5495f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    union {
5505f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov      void (*handler)(int signo);
5512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void (*sigaction)(int signo, void *info, void *ctx);
5525f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    };
5535f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    unsigned long sa_flags;
5545f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    void (*sa_restorer)(void);
5555f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    __sanitizer_kernel_sigset_t sa_mask;
5565f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  };
5575f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov
55806658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov  extern uptr sig_ign;
55906658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov  extern uptr sig_dfl;
560b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  extern uptr sa_siginfo;
5619530eb721dfacdf2c3f46d408e22d3f7cf8be667Evgeniy Stepanov
562745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#if SANITIZER_LINUX
563745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern int e_tabsz;
564745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#endif
565745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov
5669d60087654f89e3452841350d9eca97644edca9dEvgeniy Stepanov  extern int af_inet;
5679d60087654f89e3452841350d9eca97644edca9dEvgeniy Stepanov  extern int af_inet6;
5689530eb721dfacdf2c3f46d408e22d3f7cf8be667Evgeniy Stepanov  uptr __sanitizer_in_addr_sz(int af);
5691aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov
5702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
5711aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov  struct __sanitizer_dl_phdr_info {
5721aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    uptr dlpi_addr;
5731aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    const char *dlpi_name;
5741aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    const void *dlpi_phdr;
5751aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    short dlpi_phnum;
5761aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov  };
5771aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov#endif
578447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov
579447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov  struct __sanitizer_addrinfo {
580447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_flags;
581447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_family;
582447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_socktype;
583447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_protocol;
5842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
58573c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    unsigned ai_addrlen;
58673c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    char *ai_canonname;
58773c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    void *ai_addr;
58873c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov#else // LINUX
58900c35cfe108797f6677252fd77214c0cbccb5c5bEvgeniy Stepanov    unsigned ai_addrlen;
59073c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    void *ai_addr;
59173c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    char *ai_canonname;
59273c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov#endif
593447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    struct __sanitizer_addrinfo *ai_next;
594447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov  };
5950a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov
5960a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov  struct __sanitizer_hostent {
5970a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    char *h_name;
5980a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    char **h_aliases;
5990a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    int h_addrtype;
6000a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    int h_length;
6010a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    char **h_addr_list;
6020a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov  };
6030a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov
604e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  struct __sanitizer_pollfd {
605e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov    int fd;
606e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov    short events;
607e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov    short revents;
608e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  };
609e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov
6102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
611e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  typedef unsigned __sanitizer_nfds_t;
612e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov#else
613e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  typedef unsigned long __sanitizer_nfds_t;
614e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov#endif
615e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov
6162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_ANDROID
6172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# if SANITIZER_LINUX
618906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov  struct __sanitizer_glob_t {
619906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov    uptr gl_pathc;
620906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov    char **gl_pathv;
6213fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    uptr gl_offs;
6223fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    int gl_flags;
623eaca82cf249021afa31dbc970278f2f28ea2a1aaTimur Iskhodzhanov
624eaca82cf249021afa31dbc970278f2f28ea2a1aaTimur Iskhodzhanov    void (*gl_closedir)(void *dirp);
625eaca82cf249021afa31dbc970278f2f28ea2a1aaTimur Iskhodzhanov    void *(*gl_readdir)(void *dirp);
6263fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    void *(*gl_opendir)(const char *);
6273fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    int (*gl_lstat)(const char *, void *);
6283fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    int (*gl_stat)(const char *, void *);
629906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov  };
6302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# elif SANITIZER_FREEBSD
6312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_glob_t {
6322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr gl_pathc;
6332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr gl_matchc;
6342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr gl_offs;
6352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int gl_flags;
6362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char **gl_pathv;
6372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int (*gl_errfunc)(const char*, int);
6382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void (*gl_closedir)(void *dirp);
6392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    struct dirent *(*gl_readdir)(void *dirp);
6402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *(*gl_opendir)(const char*);
6412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int (*gl_lstat)(const char*, void* /* struct stat* */);
6422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int (*gl_stat)(const char*, void* /* struct stat* */);
6432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
6442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# endif  // SANITIZER_FREEBSD
645906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov
6462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# if SANITIZER_LINUX || SANITIZER_FREEBSD
647906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov  extern int glob_nomatch;
6483fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov  extern int glob_altdirfunc;
6492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# endif
6502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // !SANITIZER_ANDROID
651906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov
65212eb79dd701d9d40551759330a9257316601373bEvgeniy Stepanov  extern unsigned path_max;
65312eb79dd701d9d40551759330a9257316601373bEvgeniy Stepanov
654c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov  struct __sanitizer_wordexp_t {
655c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov    uptr we_wordc;
656c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov    char **we_wordv;
657c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov    uptr we_offs;
6582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
6592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *we_strings;
6602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr we_nbytes;
6612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
662c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov  };
663c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov
6642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX && !SANITIZER_ANDROID
6652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_FILE {
6662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int _flags;
6672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_read_ptr;
6682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_read_end;
6692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_read_base;
6702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_write_base;
6712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_write_ptr;
6722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_write_end;
6732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_buf_base;
6742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_buf_end;
6752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_save_base;
6762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_backup_base;
6772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_save_end;
6782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *_markers;
6792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_FILE *_chain;
6802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int _fileno;
6812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
6822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# define SANITIZER_HAS_STRUCT_FILE 1
6832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
6842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef void __sanitizer_FILE;
6852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# define SANITIZER_HAS_STRUCT_FILE 0
6862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
6872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
68822d8767a45f08218b4d725146c5a8484a183be29Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID && \
6892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    (defined(__i386) || defined(__x86_64))
690341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern unsigned struct_user_regs_struct_sz;
691341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern unsigned struct_user_fpregs_struct_sz;
692341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern unsigned struct_user_fpxregs_struct_sz;
693341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov
6943ee98e37856935ac1d79d51364df73ce00d8218eEvgeniy Stepanov  extern int ptrace_peektext;
6953ee98e37856935ac1d79d51364df73ce00d8218eEvgeniy Stepanov  extern int ptrace_peekdata;
6963ee98e37856935ac1d79d51364df73ce00d8218eEvgeniy Stepanov  extern int ptrace_peekuser;
697341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getregs;
698341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setregs;
699341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getfpregs;
700341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setfpregs;
701341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getfpxregs;
702341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setfpxregs;
703341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getsiginfo;
704341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setsiginfo;
705341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getregset;
706341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setregset;
7075d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines  extern int ptrace_geteventmsg;
708341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#endif
709341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov
7102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
71110362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern unsigned struct_shminfo_sz;
71210362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern unsigned struct_shm_info_sz;
71310362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_ipc_stat;
71410362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_ipc_info;
71510362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_shm_info;
71610362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_shm_stat;
71710362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov#endif
71810362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov
7192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern int map_fixed;
7202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
721745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  // ioctl arguments
7224757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov  struct __sanitizer_ifconf {
7234757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov    int ifc_len;
7244757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov    union {
7254757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov      void *ifcu_req;
7264757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov    } ifc_ifcu;
72789d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov#if SANITIZER_MAC
72889d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov  } __attribute__((packed));
72989d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov#else
7304757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov  };
73189d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov#endif
7324757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov
7332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX && !SANITIZER_ANDROID
7342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesstruct __sanitizer__obstack_chunk {
7352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  char *limit;
7362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer__obstack_chunk *prev;
7372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines};
7382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
7392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesstruct __sanitizer_obstack {
7402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  long chunk_size;
7412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer__obstack_chunk *chunk;
7422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  char *object_base;
7432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  char *next_free;
7442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  uptr more_fields[7];
7452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines};
7462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
7472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
7482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NRBITS 8
7492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPEBITS 8
7505d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__)
7512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZEBITS 13
7522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRBITS 3
7532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NONE 1U
7542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_WRITE 4U
7552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_READ 2U
7562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
7572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZEBITS 14
7582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRBITS 2
7592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NONE 0U
7602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_WRITE 1U
7612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_READ 2U
7622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
7632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NRMASK ((1 << IOC_NRBITS) - 1)
7642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1)
7652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1)
7662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if defined(IOC_DIRMASK)
7672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#undef IOC_DIRMASK
7682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
7692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1)
7702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NRSHIFT 0
7712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS)
7722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS)
7732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS)
7742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define EVIOC_EV_MAX 0x1f
7752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define EVIOC_ABS_MAX 0x3f
7762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
7772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK)
7782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK)
7792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)
7802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)
7814612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov
782745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_arpreq_sz;
783745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_ifreq_sz;
784745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_termios_sz;
785745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_winsize_sz;
786745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov
787745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#if SANITIZER_LINUX
788745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_msf_sz;
789745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_multisession_sz;
790745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_read_audio_sz;
791745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_subchnl_sz;
792745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_ti_sz;
793745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_tocentry_sz;
794745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_tochdr_sz;
795745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_volctrl_sz;
7964612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_ff_effect_sz;
797745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_drive_params_sz;
798745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_drive_struct_sz;
799745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_fdc_state_sz;
800745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_max_errors_sz;
801745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_raw_cmd_sz;
802745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_struct_sz;
803745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_write_errors_sz;
804745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_format_descr_sz;
805745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_hd_driveid_sz;
806745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_hd_geometry_sz;
8074612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_input_absinfo_sz;
8084612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_input_id_sz;
8092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_mtpos_sz;
8102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_termio_sz;
8112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_vt_consize_sz;
8122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_vt_sizes_sz;
8132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_vt_stat_sz;
8142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX
8152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
8162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
8172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_copr_buffer_sz;
8182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_copr_debug_buf_sz;
8192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_copr_msg_sz;
820745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_midi_info_sz;
821745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_mtget_sz;
822745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_mtop_sz;
823745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_rtentry_sz;
824745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sbi_instrument_sz;
825745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_seq_event_rec_sz;
826745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_synth_info_sz;
827745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_vt_mode_sz;
8282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
829745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov
830745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
831745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_ax25_parms_struct_sz;
832745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cyclades_monitor_sz;
8334612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_input_keymap_entry_sz;
834745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_ipx_config_data_sz;
835745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbdiacrs_sz;
836745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbentry_sz;
837745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbkeycode_sz;
838745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbsentry_sz;
839745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_mtconfiginfo_sz;
840745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_nr_parms_struct_sz;
841745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_scc_modem_sz;
842745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_scc_stat_sz;
843745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_serial_multiport_struct_sz;
844745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_serial_struct_sz;
845745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sockaddr_ax25_sz;
846745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_unimapdesc_sz;
847745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_unimapinit_sz;
8482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
8492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
8502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
8512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_audio_buf_info_sz;
8522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_ppp_stats_sz;
8532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
8544f0fd8e131b6c2f13244a0fd808abe0da7a50983Dmitry Vyukov
855efb0226d4bc5a61e26851271e1aec2dd0e1f6781Bob Wilson#if !SANITIZER_ANDROID && !SANITIZER_MAC
856745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sioc_sg_req_sz;
857745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sioc_vif_req_sz;
858745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#endif
8592557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov
8602557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  // ioctl request identifiers
861bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov
862bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov  // A special value to mark ioctls that are not present on the target platform,
863bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov  // when it can not be determined without including any system headers.
864bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov  extern unsigned IOCTL_NOT_PRESENT;
865bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov
8662557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOASYNC;
8672557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOCLEX;
8682557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOGETOWN;
8692557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIONBIO;
8702557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIONCLEX;
8712557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOSETOWN;
8722557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCADDMULTI;
8732557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCATMARK;
8742557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDELMULTI;
8752557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFADDR;
8762557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFBRDADDR;
8772557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFCONF;
8782557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFDSTADDR;
8792557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFFLAGS;
8802557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMETRIC;
8812557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMTU;
8822557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFNETMASK;
8832557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGPGRP;
8842557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFADDR;
8852557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFBRDADDR;
8862557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFDSTADDR;
8872557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFFLAGS;
8882557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMETRIC;
8892557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMTU;
8902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFNETMASK;
8912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSPGRP;
8922557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCCONS;
8932557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCEXCL;
8942557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGETD;
8952557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGPGRP;
8962557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGWINSZ;
8972557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMBIC;
8982557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMBIS;
8992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMGET;
9002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMSET;
9012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCNOTTY;
9022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCNXCL;
9032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCOUTQ;
9042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCPKT;
9052557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSCTTY;
9062557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSETD;
9072557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSPGRP;
9082557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSTI;
9092557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSWINSZ;
9102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
9112557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGETSGCNT;
9122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGETVIFCNT;
9132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#endif
9142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#if SANITIZER_LINUX
9154612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGABS;
9164612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGBIT;
9174612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGEFFECTS;
9184612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGID;
9194612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGKEY;
9204612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGKEYCODE;
9214612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGLED;
9224612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGNAME;
9234612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGPHYS;
9244612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGRAB;
9254612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGREP;
9264612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGSND;
9274612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGSW;
9284612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGUNIQ;
9294612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGVERSION;
9304612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCRMFF;
9314612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSABS;
9324612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSFF;
9334612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSKEYCODE;
9344612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSREP;
9352557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKFLSBUF;
9362557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKGETSIZE;
9372557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKRAGET;
9382557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKRASET;
9392557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKROGET;
9402557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKROSET;
9412557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKRRPART;
9422557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMAUDIOBUFSIZ;
9432557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMEJECT;
9442557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMEJECT_SW;
9452557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMMULTISESSION;
9462557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMPAUSE;
9472557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMPLAYMSF;
9482557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMPLAYTRKIND;
9492557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADAUDIO;
9502557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADCOOKED;
9512557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADMODE1;
9522557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADMODE2;
9532557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADRAW;
9542557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADTOCENTRY;
9552557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADTOCHDR;
9562557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMRESET;
9572557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMRESUME;
9582557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSEEK;
9592557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSTART;
9602557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSTOP;
9612557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSUBCHNL;
9622557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMVOLCTRL;
9632557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMVOLREAD;
9642557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROM_GET_UPC;
9652557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDCLRPRM;
9662557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDDEFPRM;
9672557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFLUSH;
9682557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFMTBEG;
9692557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFMTEND;
9702557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFMTTRK;
9712557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETDRVPRM;
9722557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETDRVSTAT;
9732557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETDRVTYP;
9742557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETFDCSTAT;
9752557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETMAXERRS;
9762557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETPRM;
9772557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDMSGOFF;
9782557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDMSGON;
9792557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDPOLLDRVSTAT;
9802557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDRAWCMD;
9812557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDRESET;
9822557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETDRVPRM;
9832557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETEMSGTRESH;
9842557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETMAXERRS;
9852557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETPRM;
9862557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDTWADDLE;
9872557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDWERRORCLR;
9882557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDWERRORGET;
9892557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_DRIVE_CMD;
9902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GETGEO;
9912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_32BIT;
9922557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_DMA;
9932557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_IDENTITY;
9942557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS;
9952557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_MULTCOUNT;
9962557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_NOWERR;
9972557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_UNMASKINTR;
9982557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_32BIT;
9992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_DMA;
10002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS;
10012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_MULTCOUNT;
10022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_NOWERR;
10032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_UNMASKINTR;
10042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_MTIOCPOS;
10052557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGASYNCMAP;
10062557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGDEBUG;
10072557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGFLAGS;
10082557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGUNIT;
10092557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGXASYNCMAP;
10102557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSASYNCMAP;
10112557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSDEBUG;
10122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSFLAGS;
10132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSMAXCID;
10142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSMRU;
10152557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSXASYNCMAP;
10162557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDARP;
10172557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDRARP;
10182557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGARP;
10192557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFENCAP;
10202557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFHWADDR;
10212557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMAP;
10222557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMEM;
10232557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFNAME;
10242557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFSLAVE;
10252557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGRARP;
10262557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGSTAMP;
10272557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSARP;
10282557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFENCAP;
10292557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFHWADDR;
10302557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFLINK;
10312557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMAP;
10322557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMEM;
10332557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFSLAVE;
10342557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSRARP;
10352557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_HALT;
10362557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_LOAD;
10372557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RCODE;
10382557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RCVMSG;
10392557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RDATA;
10402557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RESET;
10412557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RUN;
10422557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;
10432557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_WCODE;
10442557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_WDATA;
10452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCFLSH;
10462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCGETA;
10472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCGETS;
10482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSBRK;
10492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSBRKP;
10502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETA;
10512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETAF;
10522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETAW;
10532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETS;
10542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETSF;
10552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETSW;
10562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCXONC;
10572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCGLCKTRMIOS;
10582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCGSOFTCAR;
10592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCINQ;
10602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCLINUX;
10612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERCONFIG;
10622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERGETLSR;
10632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERGWILD;
10642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERSWILD;
10652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSLCKTRMIOS;
10662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSSOFTCAR;
10672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_DISALLOCATE;
10682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_GETSTATE;
10692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_RESIZE;
10702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_RESIZEX;
10712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_SENDSIG;
10722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX
10732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
10742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_MTIOCGET;
10752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_MTIOCTOP;
10762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_SIOCADDRT;
10772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_SIOCDELRT;
10782557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE;
10792557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETFMTS;
10802557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK;
10812557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_POST;
10822557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_RESET;
10832557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SETFMT;
10842557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT;
10852557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SPEED;
10862557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_STEREO;
10872557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE;
10882557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SYNC;
10892557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE;
10902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR;
10912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_MIDI_INFO;
10922557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_MIDI_PRETIME;
10932557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE;
10942557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT;
10952557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT;
10962557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS;
10972557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS;
10982557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND;
10992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_PANIC;
11002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE;
11012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_RESET;
11022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES;
11032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_SYNC;
11042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI;
11052557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD;
11062557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SYNTH_INFO;
11072557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL;
11082557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_CONTINUE;
11092557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_METRONOME;
11102557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_SELECT;
11112557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_SOURCE;
11122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_START;
11132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_STOP;
11142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_TEMPO;
11152557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE;
11162557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM;
11172557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_BASS;
11182557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_CAPS;
11192557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_CD;
11202557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK;
11212557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE;
11222557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN;
11232557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_IMIX;
11242557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE1;
11252557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE2;
11262557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE3;
11272557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE;
11282557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LOUD;
11292557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_MIC;
11302557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_MUTE;
11312557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN;
11322557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_PCM;
11332557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV;
11342557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK;
11352557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC;
11362557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER;
11372557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS;
11382557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH;
11392557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE;
11402557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME;
11412557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM;
11422557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS;
11432557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_CD;
11442557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE;
11452557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN;
11462557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX;
11472557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1;
11482557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2;
11492557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3;
11502557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE;
11512557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD;
11522557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC;
11532557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE;
11542557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN;
11552557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM;
11562557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV;
11572557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC;
11582557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER;
11592557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH;
11602557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE;
11612557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME;
11622557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_BITS;
11632557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS;
11642557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_FILTER;
11652557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_RATE;
11662557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS;
11672557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER;
11682557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_ACTIVATE;
11692557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_GETMODE;
11702557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_OPENQRY;
11712557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_RELDISP;
11722557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_SETMODE;
11732557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_WAITACTIVE;
11742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX || SANITIZER_FREEBSD
11752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
11762557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
11772557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETDEFTHRESH;
11782557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETDEFTIMEOUT;
11792557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETMON;
11802557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETTHRESH;
11812557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETTIMEOUT;
11822557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETDEFTHRESH;
11832557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETDEFTIMEOUT;
11842557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETTHRESH;
11852557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETTIMEOUT;
11862557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_EMANCIPATE;
11872557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_ENSLAVE;
11882557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_GETMASTRCFG;
11892557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_GETSLAVECFG;
11902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_SETMASTRCFG;
11912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_SETSLAVECFG;
11924612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGKEYCODE_V2;
11934612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGPROP;
11944612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSKEYCODE_V2;
11957028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_GETFLAGS;
11967028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_GETVERSION;
11977028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_SETFLAGS;
11987028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_SETVERSION;
11992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_CMAP;
12002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_FONT;
12012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_UNIMAP;
12022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_UNISCRNMAP;
12032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDADDIO;
12042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDDELIO;
12052557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGETKEYCODE;
12062557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBDIACR;
12072557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBENT;
12082557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBLED;
12092557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBMETA;
12102557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBSENT;
12112557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDMAPDISP;
12122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSETKEYCODE;
12132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSIGACCEPT;
12142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBDIACR;
12152557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBENT;
12162557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBLED;
12172557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBMETA;
12182557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBSENT;
12192557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDUNMAPDISP;
12202557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPABORT;
12212557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPABORTOPEN;
12222557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPCAREFUL;
12232557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPCHAR;
12242557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPGETIRQ;
12252557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPGETSTATUS;
12262557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPRESET;
12272557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPSETIRQ;
12282557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPTIME;
12292557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPWAIT;
12308766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_MTIOCGETCONFIG;
12318766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_MTIOCSETCONFIG;
12322557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_CMAP;
12332557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_FONT;
12342557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_UNIMAP;
12352557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_UNIMAPCLR;
12362557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_UNISCRNMAP;
12372557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN;
12382557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST;
12392557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE;
12402557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE;
12412557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCAIPXITFCRT;
12422557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCAIPXPRISLT;
12438766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25ADDUID;
12448766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25DELUID;
12458766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25GETPARMS;
12468766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25GETUID;
12478766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25NOUID;
12488766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25SETPARMS;
12492557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDEVPLIP;
12502557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCIPXCFGDATA;
12518766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRDECOBS;
12528766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRGETPARMS;
12538766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRRTCTL;
12548766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRSETPARMS;
12552557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETISPACE;
12562557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE;
12572557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGSERIAL;
12582557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSERGETMULTI;
12592557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSERSETMULTI;
12602557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSSERIAL;
12612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
12622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
12632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
12642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_GIO_SCRNMAP;
12652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDDISABIO;
12662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDENABIO;
12672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGETLED;
12682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGETMODE;
12692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGKBMODE;
12702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGKBTYPE;
12712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDMKTONE;
12722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDSETLED;
12732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDSETMODE;
12742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDSKBMODE;
12752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KIOCSOUND;
12762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_PIO_SCRNMAP;
12772557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#endif
127870db33e143303752c7fe8800d15b5b31066b1e0dSergey Matveev
12792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern const int errno_EINVAL;
128011f5309ec1bf13430c8a3a16f177d9e8e1190e38Dmitry Vyukov  extern const int errno_EOWNERDEAD;
12812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
12822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern const int si_SEGV_MAPERR;
12832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern const int si_SEGV_ACCERR;
12849358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov}  // namespace __sanitizer
128578c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
1286bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov#define CHECK_TYPE_SIZE(TYPE) \
1287bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))
1288bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
1289bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov#define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
1290bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *) NULL)->MEMBER) == \
1291bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 sizeof(((CLASS *) NULL)->MEMBER));                \
1292bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) ==          \
1293bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 offsetof(CLASS, MEMBER))
1294bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
1295bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov// For sigaction, which is a function and struct at the same time,
1296bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov// and thus requires explicit "struct" in sizeof() expression.
1297bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov#define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
1298bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *) NULL)->MEMBER) == \
1299bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 sizeof(((struct CLASS *) NULL)->MEMBER));                \
1300bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) ==          \
1301bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 offsetof(struct CLASS, MEMBER))
1302bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
130378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#endif
1304