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
2186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#if SANITIZER_FREEBSD
2286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// FreeBSD's dlopen() returns a pointer to an Obj_Entry structure that
2386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// incroporates the map structure.
2486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines# define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \
2586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines    ((link_map*)((handle) == nullptr ? nullptr : ((char*)(handle) + 544)))
2686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#else
2786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines# define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle))
2886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#endif  // !SANITIZER_FREEBSD
2986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines
309358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanovnamespace __sanitizer {
3178c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_utsname_sz;
3278c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_stat_sz;
332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_FREEBSD && !SANITIZER_IOS
3478c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_stat64_sz;
35b8a141f3783d796eabf45fabff82f3e08244e338Alexander Potapenko#endif
369358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov  extern unsigned struct_rusage_sz;
37897a4ae31f5c55255c78854b69b4cd4a4e3c7c39Evgeniy Stepanov  extern unsigned siginfo_t_sz;
38e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned struct_itimerval_sz;
39e4bdda51b3469aa0f6ef6f6c4656419effa48038Evgeniy Stepanov  extern unsigned pthread_t_sz;
405e2d3776a314629680921abd1d55d89d95a2da90Alexey Samsonov  extern unsigned pthread_cond_t_sz;
41745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned pid_t_sz;
42745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned timeval_sz;
43745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned uid_t_sz;
442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned gid_t_sz;
4557a1095fca7b95db8a0ec87fce7a6f0e331a5b99Evgeniy Stepanov  extern unsigned mbstate_t_sz;
46639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_timezone_sz;
47639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_tms_sz;
48639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_itimerspec_sz;
49639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_sigevent_sz;
50639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned struct_sched_param_sz;
511bb2229028dd78280d24c26b9efbe8476d966e05Evgeniy Stepanov  extern unsigned struct_statfs64_sz;
524fb04a8445076debf51d220f75211584b89043c8Evgeniy Stepanov
534fb04a8445076debf51d220f75211584b89043c8Evgeniy Stepanov#if !SANITIZER_ANDROID
546a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  extern unsigned struct_statfs_sz;
556a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  extern unsigned struct_sockaddr_sz;
56072770202bb1002172abe9a4b1eeb7f2d2fb004fEvgeniy Stepanov  extern unsigned ucontext_t_sz;
574fb04a8445076debf51d220f75211584b89043c8Evgeniy Stepanov#endif // !SANITIZER_ANDROID
589358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov
5924e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX
60e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov
61e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov#if defined(__x86_64__)
62e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 144;
63e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 0;
64e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov#elif defined(__i386__)
65e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 64;
66e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 96;
67f17dd743288942a36f82e09706f18477b27f603dEvgeniy Stepanov#elif defined(__arm__)
68f17dd743288942a36f82e09706f18477b27f603dEvgeniy Stepanov  const unsigned struct_kernel_stat_sz = 64;
69f17dd743288942a36f82e09706f18477b27f603dEvgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 104;
702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif defined(__aarch64__)
712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct_kernel_stat_sz = 128;
722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct_kernel_stat64_sz = 104;
730d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#elif defined(__powerpc__) && !defined(__powerpc64__)
740d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 72;
750d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 104;
760d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#elif defined(__powerpc64__)
770d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat_sz = 144;
780d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  const unsigned struct_kernel_stat64_sz = 104;
796a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#elif defined(__mips__)
806a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  #if SANITIZER_WORDSIZE == 64
816a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  const unsigned struct_kernel_stat_sz = 216;
826a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  #else
836a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  const unsigned struct_kernel_stat_sz = 144;
846a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  #endif
856a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  const unsigned struct_kernel_stat64_sz = 104;
86e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov#endif
87d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov  struct __sanitizer_perf_event_attr {
88d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov    unsigned type;
89d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov    unsigned size;
90d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov    // More fields that vary with the kernel version.
91d7041c6617b10302be6849b55a88dc928fd7f6b8Evgeniy Stepanov  };
92e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov
9378c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov  extern unsigned struct_epoll_event_sz;
94359d7fc7daf099ab8ef9a860564542d2581544aaEvgeniy Stepanov  extern unsigned struct_sysinfo_sz;
95639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned __user_cap_header_struct_sz;
96639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  extern unsigned __user_cap_data_struct_sz;
9725ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_new_utsname_sz;
9825ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_old_utsname_sz;
9925ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_oldold_utsname_sz;
10025ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov
101639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long);
1022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX
1032d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
1052d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1062d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if defined(__powerpc64__)
1072d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct___old_kernel_stat_sz = 0;
1082d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
1092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned struct___old_kernel_stat_sz = 32;
1102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
1112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_rlimit_sz;
1132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_utimbuf_sz;
1142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_timespec_sz;
115639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov
116bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  struct __sanitizer_iocb {
117bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_data;
118bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u32   aio_key_or_aio_reserved1; // Simply crazy.
119bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u32   aio_reserved1_or_aio_key; // Luckily, we don't need these.
120bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u16   aio_lio_opcode;
121bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    s16   aio_reqprio;
122bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u32   aio_fildes;
123bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_buf;
124bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_nbytes;
125bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    s64   aio_offset;
126bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov    u64   aio_reserved2;
127c50f7962c823506109b6307209411b36e0d46abdEvgeniy Stepanov    u64   aio_reserved3;
128bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  };
129bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
1302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_io_event {
1312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 data;
1322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 obj;
1332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 res;
1342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 res2;
1352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
1362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
137e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned iocb_cmd_pread = 0;
138e1e68833ddbebf4827690218763c0be5b91104e7Evgeniy Stepanov  const unsigned iocb_cmd_pwrite = 1;
1392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned iocb_cmd_preadv = 7;
1402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned iocb_cmd_pwritev = 8;
141bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
142639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  struct __sanitizer___sysctl_args {
143639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    int *name;
144639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    int nlen;
145639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    void *oldval;
146639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    uptr *oldlenp;
147639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    void *newval;
148639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov    uptr newlen;
1499a4a1590169e42076aee67a6fd472ece77b9b484Evgeniy Stepanov    unsigned long ___unused[4];
150639df402c4925acd3ea7bebff729a535e3f79964Evgeniy Stepanov  };
1512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const unsigned old_sigset_t_sz = sizeof(unsigned long);
1532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
1542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID
1562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_mallinfo {
1572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr v[10];
1582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
1592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
16078c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
16124e13723f8477d8c42ab8b2a7f4f69fc089842f1Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
1622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_mallinfo {
1632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int v[10];
1642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
1652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
16625ecb75efb30f8a8f80cc89c3a1cb83508e7bacfEvgeniy Stepanov  extern unsigned struct_ustat_sz;
167b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov  extern unsigned struct_rlimit64_sz;
1680489e113d3e9fa9379fa38bc1a50f81414feab48Evgeniy Stepanov  extern unsigned struct_statvfs64_sz;
169f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov
170f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  struct __sanitizer_ipc_perm {
171f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int __key;
172f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int uid;
173f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int gid;
174f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int cuid;
175f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int cgid;
1767f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#ifdef __powerpc__
1770d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov    unsigned mode;
1780d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov    unsigned __seq;
1797f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused1;
1807f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused2;
18186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#elif defined(__mips__) || defined(__aarch64__)
1826a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    unsigned int mode;
1836a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    unsigned short __seq;
1846a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    unsigned short __pad1;
1856a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    unsigned long __unused1;
1866a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    unsigned long __unused2;
1870d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#else
188f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short mode;
189f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short __pad1;
190f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short __seq;
191f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    unsigned short __pad2;
1927f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#if defined(__x86_64__) && !defined(_LP64)
1937f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused1;
1947f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    u64 __unused2;
1957f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#else
1967f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    unsigned long __unused1;
1977f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    unsigned long __unused2;
1987f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#endif
1990d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#endif
200f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  };
201f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov
202f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  struct __sanitizer_shmid_ds {
203f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    __sanitizer_ipc_perm shm_perm;
2040d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #ifndef __powerpc__
205f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_segsz;
2067f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling  #elif !defined(__powerpc64__)
2077f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling    uptr __unused0;
2080d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #endif
2092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #if defined(__x86_64__) && !defined(_LP64)
2102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_atime;
2112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_dtime;
2122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_ctime;
2132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #else
214f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_atime;
2156a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  #if !defined(_LP64) && !defined(__mips__)
216f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused1;
217f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  #endif
218f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_dtime;
2196a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  #if !defined(_LP64) && !defined(__mips__)
220f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused2;
221f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  #endif
222f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_ctime;
2236a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  #if !defined(_LP64) && !defined(__mips__)
224f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused3;
225f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  #endif
2262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #endif
2270d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #ifdef __powerpc__
2280d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov    uptr shm_segsz;
2290d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  #endif
230f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int shm_cpid;
231f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    int shm_lpid;
2322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #if defined(__x86_64__) && !defined(_LP64)
2332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 shm_nattch;
2342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 __unused4;
2352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    u64 __unused5;
2362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #else
237f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr shm_nattch;
238f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused4;
239f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov    uptr __unused5;
2402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  #endif
2412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
2422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif SANITIZER_FREEBSD
2432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_ipc_perm {
2442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int cuid;
2452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int cgid;
2462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int uid;
2472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int gid;
2482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short mode;
2492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short seq;
2502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    long key;
251f3603890015c130420def39d67a02c2fdafc6f84Evgeniy Stepanov  };
2522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
2532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_shmid_ds {
2542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_ipc_perm shm_perm;
2552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_segsz;
2562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int shm_lpid;
2572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int shm_cpid;
2582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int shm_nattch;
2592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_atime;
2602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_dtime;
2612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned long shm_ctime;
2622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
2632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
2642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
2652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
2662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_msqid_ds_sz;
2672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_mq_attr_sz;
2682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_timex_sz;
2692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_statvfs_sz;
2702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
271b711ca6e040d0ac4adb79e688e1a59afcc871d20Evgeniy Stepanov
2729666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  struct __sanitizer_iovec {
2732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *iov_base;
2749666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr iov_len;
2759666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  };
2769666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov
2772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_ANDROID
2782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_ifaddrs {
2792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    struct __sanitizer_ifaddrs *ifa_next;
2802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *ifa_name;
2812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int ifa_flags;
2822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_addr;    // (struct sockaddr *)
2832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_netmask; // (struct sockaddr *)
2842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // This is a union on Linux.
2852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# ifdef ifa_dstaddr
2862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# undef ifa_dstaddr
2872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# endif
2882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_dstaddr; // (struct sockaddr *)
2892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *ifa_data;
2902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
2912d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // !SANITIZER_ANDROID
2922d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
2938be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov#if SANITIZER_MAC
2948be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov  typedef unsigned long __sanitizer_pthread_key_t;
2958be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov#else
296737da2f031badfad5bc5b762cc50d789fbcb6ef8Evgeniy Stepanov  typedef unsigned __sanitizer_pthread_key_t;
2978be684c5970389c6c86b01592e98ed5a3bc4f78dEvgeniy Stepanov#endif
298737da2f031badfad5bc5b762cc50d789fbcb6ef8Evgeniy Stepanov
2992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX && !SANITIZER_ANDROID
3002d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3012d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_XDR {
3022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int x_op;
3032d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *x_ops;
3042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr x_public;
3052d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr x_private;
3062d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr x_base;
3072d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned x_handy;
3082d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const int __sanitizer_XDR_ENCODE = 0;
3112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const int __sanitizer_XDR_DECODE = 1;
3122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  const int __sanitizer_XDR_FREE = 2;
3132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_passwd {
3162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_name;
3172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_passwd;
3182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int pw_uid;
3192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int pw_gid;
3202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_MAC || SANITIZER_FREEBSD
3212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    long pw_change;
3222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_class;
3232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_ANDROID
3252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_gecos;
3262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_dir;
3282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *pw_shell;
3292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_MAC || SANITIZER_FREEBSD
3302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    long pw_expire;
3312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
3332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int pw_fields;
3342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_group {
3382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *gr_name;
3392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *gr_passwd;
3402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int gr_gid;
3412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char **gr_mem;
3422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if defined(__x86_64__) && !defined(_LP64)
3452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long long __sanitizer_time_t;
3462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
3472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long __sanitizer_time_t;
3482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
3492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
3502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_timeb {
3512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_time_t time;
3522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short millitm;
3532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    short timezone;
3542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    short dstflag;
3552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
3562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
357369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov  struct __sanitizer_ether_addr {
358369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov    u8 octet[6];
359369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov  };
360369a9a6d4297af031227db1c6fedd21ee7033dc1Evgeniy Stepanov
361cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov  struct __sanitizer_tm {
362cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_sec;
363cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_min;
364cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_hour;
365cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_mday;
366cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_mon;
367cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_year;
368cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_wday;
369cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_yday;
370cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    int tm_isdst;
371cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    long int tm_gmtoff;
372cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov    const char *tm_zone;
373cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov  };
374cf39032f101dfb3b97b1dfc7b6d03f5d89dff266Evgeniy Stepanov
3754d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov#if SANITIZER_LINUX
3764d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov  struct __sanitizer_mntent {
3774d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_fsname;
3784d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_dir;
3794d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_type;
3804d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    char *mnt_opts;
3814d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    int mnt_freq;
3824d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov    int mnt_passno;
3834d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov  };
3844d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov#endif
3854d7297daef90ad59446250617b72d184141436fcEvgeniy Stepanov
3862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
387e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  struct __sanitizer_msghdr {
388e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    void *msg_name;
389e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned msg_namelen;
390e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    struct __sanitizer_iovec *msg_iov;
391e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned msg_iovlen;
392e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    void *msg_control;
393e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned msg_controllen;
394e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    int msg_flags;
395e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  };
396e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  struct __sanitizer_cmsghdr {
397e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    unsigned cmsg_len;
398e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    int cmsg_level;
399e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov    int cmsg_type;
400e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov  };
401e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov#else
4029666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  struct __sanitizer_msghdr {
4039666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    void *msg_name;
4049666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    unsigned msg_namelen;
4059666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    struct __sanitizer_iovec *msg_iov;
4069666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr msg_iovlen;
4079666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    void *msg_control;
4089666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr msg_controllen;
4099666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    int msg_flags;
4109666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  };
4119666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  struct __sanitizer_cmsghdr {
4129666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    uptr cmsg_len;
4139666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    int cmsg_level;
4149666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov    int cmsg_type;
4159666d89b628867b2c790d5415f0371fdb4050b0cEvgeniy Stepanov  };
416e215980807069d7bdeb1beff8377b3fe7be33c5fEvgeniy Stepanov#endif
41710fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov
418a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#if SANITIZER_MAC
419a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent {
420b6bde4d2bc5231cd1b38ff92e51afb3f6e157386Alexey Samsonov    unsigned long long d_ino;
421b6bde4d2bc5231cd1b38ff92e51afb3f6e157386Alexey Samsonov    unsigned long long d_seekoff;
422a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned short d_reclen;
423a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    // more fields that we don't care about
424a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  };
4252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif SANITIZER_FREEBSD
4262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_dirent {
4272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned int d_fileno;
4282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    unsigned short d_reclen;
4292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // more fields that we don't care about
4302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
431e041c6024b3ebf1365c0f99732fc69c607577571Kostya Serebryany#elif SANITIZER_ANDROID || defined(__x86_64__)
432a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent {
433a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned long long d_ino;
434a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned long long d_off;
435a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned short d_reclen;
436a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    // more fields that we don't care about
437a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  };
438a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#else
439a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent {
440a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    uptr d_ino;
441a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    uptr 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
447a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
448a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  struct __sanitizer_dirent64 {
4495a482cd54a75bf821fb8c61f2fe4e84ae9efb714Chandler Carruth    unsigned long long d_ino;
4505a482cd54a75bf821fb8c61f2fe4e84ae9efb714Chandler Carruth    unsigned long long d_off;
451a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    unsigned short d_reclen;
452a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov    // more fields that we don't care about
453a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov  };
454a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov#endif
455a0379b5566f7c04536a313e40c450c6aef4b3ec5Evgeniy Stepanov
4562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 'clock_t' is 32 bits wide on x64 FreeBSD
4572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
4582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef int __sanitizer_clock_t;
4592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif defined(__x86_64__) && !defined(_LP64)
4602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long long __sanitizer_clock_t;
4612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
4622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef long __sanitizer_clock_t;
4632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
4642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
4656a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#if SANITIZER_LINUX
4666a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  typedef int __sanitizer_clockid_t;
4676a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif
4686a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
4692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
4706a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__)\
4716a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                   || defined(__mips__)
472a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned __sanitizer___kernel_uid_t;
473a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned __sanitizer___kernel_gid_t;
474a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov#else
47585626e8127d1f795a447c1bacb5a2606c7b954d9Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_uid_t;
476a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_gid_t;
4777f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#endif
4787f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#if defined(__x86_64__) && !defined(_LP64)
4797f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling  typedef long long __sanitizer___kernel_off_t;
4807f790caa37ec1c9807c877297d30e040e83ed215Bill Wendling#else
481e041c6024b3ebf1365c0f99732fc69c607577571Kostya Serebryany  typedef long __sanitizer___kernel_off_t;
482a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov#endif
4830d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov
4846d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#if defined(__powerpc__) || defined(__mips__)
4850d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  typedef unsigned int __sanitizer___kernel_old_uid_t;
4860d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov  typedef unsigned int __sanitizer___kernel_old_gid_t;
4870d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#else
488a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_old_uid_t;
489a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef unsigned short __sanitizer___kernel_old_gid_t;
4900d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov#endif
4910d2a93500c4b071977a9ee89dbc24586fe54bca5Evgeniy Stepanov
492a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef long long __sanitizer___kernel_loff_t;
493a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  typedef struct {
494a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov    unsigned long fds_bits[1024 / (8 * sizeof(long))];
495a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov  } __sanitizer___kernel_fd_set;
496a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov#endif
497a3cb27e188bd23190ba7a41a8c62fa7cc5ac5544Evgeniy Stepanov
49810fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  // This thing depends on the platform. We are only interested in the upper
49910fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  // limit. Verified with a compiler assert in .cc.
50010fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  const int pthread_attr_t_max_sz = 128;
50110fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  union __sanitizer_pthread_attr_t {
5020ecc4379bbb04f1d03ceb58f6a0751790fb17c75Evgeniy Stepanov    char size[pthread_attr_t_max_sz]; // NOLINT
50310fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov    void *align;
50410fd3227546d17c7411241a45ebc143b2031c78dEvgeniy Stepanov  };
50506658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov
506b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#if SANITIZER_ANDROID
507b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  typedef unsigned long __sanitizer_sigset_t;
508b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#elif SANITIZER_MAC
509b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  typedef unsigned __sanitizer_sigset_t;
510b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#elif SANITIZER_LINUX
511b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  struct __sanitizer_sigset_t {
512b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    // The size is determined by looking at sizeof of real sigset_t on linux.
513b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    uptr val[128 / sizeof(uptr)];
514b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  };
5152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif SANITIZER_FREEBSD
5162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_sigset_t {
5172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines     // uint32_t * 4
5182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines     unsigned int __bits[4];
5192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
520b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#endif
52106658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov
5222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
523b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  struct __sanitizer_sigaction {
5246a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#if defined(__mips__) && !SANITIZER_FREEBSD
5256a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    unsigned int sa_flags;
5266a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif
527b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    union {
5282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void (*sigaction)(int sig, void *siginfo, void *uctx);
5292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void (*handler)(int sig);
530b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    };
5312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
5322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int sa_flags;
5332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_sigset_t sa_mask;
5342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
535b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    __sanitizer_sigset_t sa_mask;
5366a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#ifndef __mips__
537b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    int sa_flags;
5382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
5396a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif
540b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#if SANITIZER_LINUX
541b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov    void (*sa_restorer)();
542b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov#endif
5436a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#if defined(__mips__) && (SANITIZER_WORDSIZE == 32)
5446a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    int sa_resv[1];
5456a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif
54606658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov  };
54706658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov
5482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
5492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t;
55086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#elif defined(__mips__)
55186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines  struct __sanitizer_kernel_sigset_t {
55286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines    u8 sig[16];
55386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines  };
5542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
5555f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  struct __sanitizer_kernel_sigset_t {
5565f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    u8 sig[8];
5575f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  };
5582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
5595f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov
5602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
5615f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  struct __sanitizer_kernel_sigaction_t {
5625f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    union {
5635f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov      void (*handler)(int signo);
5642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void (*sigaction)(int signo, void *info, void *ctx);
5655f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    };
5665f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    unsigned long sa_flags;
5675f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    void (*sa_restorer)(void);
5685f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov    __sanitizer_kernel_sigset_t sa_mask;
5695f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov  };
5705f4984db88b7b67539f62d7653b928aeadf91b16Dmitry Vyukov
57106658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov  extern uptr sig_ign;
57206658ea68c4912fffafef6e65f36dce7faa4a174Evgeniy Stepanov  extern uptr sig_dfl;
573b32d1bfc59592bc57d74a1e940881354b4788eaeEvgeniy Stepanov  extern uptr sa_siginfo;
5749530eb721dfacdf2c3f46d408e22d3f7cf8be667Evgeniy Stepanov
575745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#if SANITIZER_LINUX
576745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern int e_tabsz;
577745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#endif
578745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov
5799d60087654f89e3452841350d9eca97644edca9dEvgeniy Stepanov  extern int af_inet;
5809d60087654f89e3452841350d9eca97644edca9dEvgeniy Stepanov  extern int af_inet6;
5819530eb721dfacdf2c3f46d408e22d3f7cf8be667Evgeniy Stepanov  uptr __sanitizer_in_addr_sz(int af);
5821aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov
5832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
5841aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov  struct __sanitizer_dl_phdr_info {
5851aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    uptr dlpi_addr;
5861aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    const char *dlpi_name;
5871aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    const void *dlpi_phdr;
5881aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov    short dlpi_phnum;
5891aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov  };
5901aad6b5444207887ecea2b9e87526585d1ce0592Evgeniy Stepanov#endif
591447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov
592447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov  struct __sanitizer_addrinfo {
593447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_flags;
594447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_family;
595447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_socktype;
596447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    int ai_protocol;
5972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
59873c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    unsigned ai_addrlen;
59973c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    char *ai_canonname;
60073c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    void *ai_addr;
60173c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov#else // LINUX
60200c35cfe108797f6677252fd77214c0cbccb5c5bEvgeniy Stepanov    unsigned ai_addrlen;
60373c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    void *ai_addr;
60473c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov    char *ai_canonname;
60573c9878bec490bbc1dab4ee8df91a8e5b3bfc5cfEvgeniy Stepanov#endif
606447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov    struct __sanitizer_addrinfo *ai_next;
607447ef19d1b8cebbeaba49e4be22ac721448dcf3eEvgeniy Stepanov  };
6080a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov
6090a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov  struct __sanitizer_hostent {
6100a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    char *h_name;
6110a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    char **h_aliases;
6120a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    int h_addrtype;
6130a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    int h_length;
6140a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov    char **h_addr_list;
6150a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov  };
6160a2cc37712a452525f9f03b3bf67b1f0a97c8d3aEvgeniy Stepanov
617e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  struct __sanitizer_pollfd {
618e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov    int fd;
619e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov    short events;
620e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov    short revents;
621e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  };
622e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov
6232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
624e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  typedef unsigned __sanitizer_nfds_t;
625e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov#else
626e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov  typedef unsigned long __sanitizer_nfds_t;
627e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov#endif
628e18e3f07802c420eb4b2da407e148084b75cecc9Evgeniy Stepanov
6292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if !SANITIZER_ANDROID
6302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# if SANITIZER_LINUX
631906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov  struct __sanitizer_glob_t {
632906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov    uptr gl_pathc;
633906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov    char **gl_pathv;
6343fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    uptr gl_offs;
6353fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    int gl_flags;
636eaca82cf249021afa31dbc970278f2f28ea2a1aaTimur Iskhodzhanov
637eaca82cf249021afa31dbc970278f2f28ea2a1aaTimur Iskhodzhanov    void (*gl_closedir)(void *dirp);
638eaca82cf249021afa31dbc970278f2f28ea2a1aaTimur Iskhodzhanov    void *(*gl_readdir)(void *dirp);
6393fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    void *(*gl_opendir)(const char *);
6403fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    int (*gl_lstat)(const char *, void *);
6413fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov    int (*gl_stat)(const char *, void *);
642906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov  };
6432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# elif SANITIZER_FREEBSD
6442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_glob_t {
6452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr gl_pathc;
6462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr gl_matchc;
6472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr gl_offs;
6482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int gl_flags;
6492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char **gl_pathv;
6502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int (*gl_errfunc)(const char*, int);
6512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void (*gl_closedir)(void *dirp);
6522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    struct dirent *(*gl_readdir)(void *dirp);
6532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *(*gl_opendir)(const char*);
6542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int (*gl_lstat)(const char*, void* /* struct stat* */);
6552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int (*gl_stat)(const char*, void* /* struct stat* */);
6562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
6572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# endif  // SANITIZER_FREEBSD
658906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov
6592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# if SANITIZER_LINUX || SANITIZER_FREEBSD
660906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov  extern int glob_nomatch;
6613fa122e6a8e12db6583793861f6cf776fe1c98a0Evgeniy Stepanov  extern int glob_altdirfunc;
6622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# endif
6632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // !SANITIZER_ANDROID
664906f2c11e854539f316f737b1f661c0f6bc66fabEvgeniy Stepanov
66512eb79dd701d9d40551759330a9257316601373bEvgeniy Stepanov  extern unsigned path_max;
66612eb79dd701d9d40551759330a9257316601373bEvgeniy Stepanov
667c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov  struct __sanitizer_wordexp_t {
668c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov    uptr we_wordc;
669c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov    char **we_wordv;
670c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov    uptr we_offs;
6712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_FREEBSD
6722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *we_strings;
6732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    uptr we_nbytes;
6742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
675c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov  };
676c5a385500057ba60c71abbb1d1cc0ee3773be792Evgeniy Stepanov
6772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX && !SANITIZER_ANDROID
6782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer_FILE {
6792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int _flags;
6802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_read_ptr;
6812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_read_end;
6822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_read_base;
6832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_write_base;
6842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_write_ptr;
6852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_write_end;
6862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_buf_base;
6872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_buf_end;
6882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_save_base;
6892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_backup_base;
6902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    char *_IO_save_end;
6912d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    void *_markers;
6922d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    __sanitizer_FILE *_chain;
6932d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int _fileno;
6942d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
6952d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# define SANITIZER_HAS_STRUCT_FILE 1
6962d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
6972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  typedef void __sanitizer_FILE;
6982d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# define SANITIZER_HAS_STRUCT_FILE 0
6992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
7002d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
70122d8767a45f08218b4d725146c5a8484a183be29Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID && \
70286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines  (defined(__i386) || defined(__x86_64) || defined(__mips64))
703341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern unsigned struct_user_regs_struct_sz;
704341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern unsigned struct_user_fpregs_struct_sz;
705341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern unsigned struct_user_fpxregs_struct_sz;
706341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov
7073ee98e37856935ac1d79d51364df73ce00d8218eEvgeniy Stepanov  extern int ptrace_peektext;
7083ee98e37856935ac1d79d51364df73ce00d8218eEvgeniy Stepanov  extern int ptrace_peekdata;
7093ee98e37856935ac1d79d51364df73ce00d8218eEvgeniy Stepanov  extern int ptrace_peekuser;
710341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getregs;
711341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setregs;
712341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getfpregs;
713341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setfpregs;
714341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getfpxregs;
715341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setfpxregs;
716341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getsiginfo;
717341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setsiginfo;
718341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_getregset;
719341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov  extern int ptrace_setregset;
7206a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  extern int ptrace_geteventmsg;
721341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#endif
722341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov
7232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
72410362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern unsigned struct_shminfo_sz;
72510362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern unsigned struct_shm_info_sz;
72610362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_ipc_stat;
72710362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_ipc_info;
72810362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_shm_info;
72910362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov  extern int shmctl_shm_stat;
73010362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov#endif
73110362d66fffcd99bd5ced983e4b389dfeba114d0Evgeniy Stepanov
7322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern int map_fixed;
7332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
734745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  // ioctl arguments
7354757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov  struct __sanitizer_ifconf {
7364757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov    int ifc_len;
7374757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov    union {
7384757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov      void *ifcu_req;
7394757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov    } ifc_ifcu;
74089d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov#if SANITIZER_MAC
74189d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov  } __attribute__((packed));
74289d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov#else
7434757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov  };
74489d1eee9f468823cc7f01b0d5281a5c9f64a4c31Evgeniy Stepanov#endif
7454757c47ba7356aec3a7d49e5e929c19159d75a01Evgeniy Stepanov
7462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX && !SANITIZER_ANDROID
7472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesstruct __sanitizer__obstack_chunk {
7482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  char *limit;
7492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer__obstack_chunk *prev;
7502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines};
7512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
7522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesstruct __sanitizer_obstack {
7532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  long chunk_size;
7542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct __sanitizer__obstack_chunk *chunk;
7552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  char *object_base;
7562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  char *next_free;
7572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  uptr more_fields[7];
7582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines};
7592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
7602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
7612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NRBITS 8
7622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPEBITS 8
7636a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__)
7642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZEBITS 13
7652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRBITS 3
7662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NONE 1U
7672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_WRITE 4U
7682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_READ 2U
7692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
7702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZEBITS 14
7712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRBITS 2
7722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NONE 0U
7732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_WRITE 1U
7742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_READ 2U
7752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
7762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NRMASK ((1 << IOC_NRBITS) - 1)
7772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1)
7782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1)
7792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if defined(IOC_DIRMASK)
7802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#undef IOC_DIRMASK
7812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
7822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1)
7832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NRSHIFT 0
7842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS)
7852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS)
7862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS)
7872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define EVIOC_EV_MAX 0x1f
7882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define EVIOC_ABS_MAX 0x3f
7892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
7902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK)
7912d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK)
7922d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)
7932d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)
7944612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov
795745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_arpreq_sz;
796745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_ifreq_sz;
797745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_termios_sz;
798745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_winsize_sz;
799745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov
800745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#if SANITIZER_LINUX
801745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_msf_sz;
802745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_multisession_sz;
803745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_read_audio_sz;
804745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_subchnl_sz;
805745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_ti_sz;
806745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_tocentry_sz;
807745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_tochdr_sz;
808745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cdrom_volctrl_sz;
8094612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_ff_effect_sz;
810745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_drive_params_sz;
811745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_drive_struct_sz;
812745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_fdc_state_sz;
813745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_max_errors_sz;
814745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_raw_cmd_sz;
815745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_struct_sz;
816745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_floppy_write_errors_sz;
817745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_format_descr_sz;
818745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_hd_driveid_sz;
819745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_hd_geometry_sz;
8204612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_input_absinfo_sz;
8214612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_input_id_sz;
8222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_mtpos_sz;
8232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_termio_sz;
8242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_vt_consize_sz;
8252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_vt_sizes_sz;
8262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_vt_stat_sz;
8272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX
8282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
8292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
8302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_copr_buffer_sz;
8312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_copr_debug_buf_sz;
8322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_copr_msg_sz;
833745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_midi_info_sz;
834745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_mtget_sz;
835745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_mtop_sz;
836745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_rtentry_sz;
837745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sbi_instrument_sz;
838745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_seq_event_rec_sz;
839745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_synth_info_sz;
840745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_vt_mode_sz;
8412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
842745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov
843745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
844745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_ax25_parms_struct_sz;
845745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_cyclades_monitor_sz;
8464612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned struct_input_keymap_entry_sz;
847745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_ipx_config_data_sz;
848745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbdiacrs_sz;
849745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbentry_sz;
850745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbkeycode_sz;
851745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_kbsentry_sz;
852745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_mtconfiginfo_sz;
853745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_nr_parms_struct_sz;
854745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_scc_modem_sz;
855745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_scc_stat_sz;
856745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_serial_multiport_struct_sz;
857745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_serial_struct_sz;
858745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sockaddr_ax25_sz;
859745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_unimapdesc_sz;
860745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_unimapinit_sz;
8612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
8622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
8632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
8642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_audio_buf_info_sz;
8652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned struct_ppp_stats_sz;
8662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
8674f0fd8e131b6c2f13244a0fd808abe0da7a50983Dmitry Vyukov
868efb0226d4bc5a61e26851271e1aec2dd0e1f6781Bob Wilson#if !SANITIZER_ANDROID && !SANITIZER_MAC
869745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sioc_sg_req_sz;
870745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov  extern unsigned struct_sioc_vif_req_sz;
871745dd0d296e7bef712df4b5c7f86c72534953738Evgeniy Stepanov#endif
8722557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov
8732557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  // ioctl request identifiers
874bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov
875bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov  // A special value to mark ioctls that are not present on the target platform,
876bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov  // when it can not be determined without including any system headers.
8776d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  extern const unsigned IOCTL_NOT_PRESENT;
878bb273d554d61c1a851158b0c79c2d3f51a845bbdEvgeniy Stepanov
8792557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOASYNC;
8802557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOCLEX;
8812557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOGETOWN;
8822557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIONBIO;
8832557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIONCLEX;
8842557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FIOSETOWN;
8852557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCADDMULTI;
8862557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCATMARK;
8872557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDELMULTI;
8882557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFADDR;
8892557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFBRDADDR;
8902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFCONF;
8912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFDSTADDR;
8922557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFFLAGS;
8932557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMETRIC;
8942557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMTU;
8952557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFNETMASK;
8962557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGPGRP;
8972557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFADDR;
8982557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFBRDADDR;
8992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFDSTADDR;
9002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFFLAGS;
9012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMETRIC;
9022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMTU;
9032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFNETMASK;
9042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSPGRP;
9052557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCCONS;
9062557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCEXCL;
9072557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGETD;
9082557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGPGRP;
9092557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGWINSZ;
9102557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMBIC;
9112557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMBIS;
9122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMGET;
9132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCMSET;
9142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCNOTTY;
9152557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCNXCL;
9162557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCOUTQ;
9172557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCPKT;
9182557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSCTTY;
9192557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSETD;
9202557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSPGRP;
9212557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSTI;
9222557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSWINSZ;
9232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
9242557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGETSGCNT;
9252557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGETVIFCNT;
9262557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#endif
9272557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#if SANITIZER_LINUX
9284612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGABS;
9294612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGBIT;
9304612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGEFFECTS;
9314612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGID;
9324612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGKEY;
9334612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGKEYCODE;
9344612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGLED;
9354612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGNAME;
9364612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGPHYS;
9374612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGRAB;
9384612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGREP;
9394612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGSND;
9404612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGSW;
9414612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGUNIQ;
9424612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGVERSION;
9434612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCRMFF;
9444612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSABS;
9454612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSFF;
9464612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSKEYCODE;
9474612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSREP;
9482557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKFLSBUF;
9492557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKGETSIZE;
9502557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKRAGET;
9512557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKRASET;
9522557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKROGET;
9532557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKROSET;
9542557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_BLKRRPART;
9552557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMAUDIOBUFSIZ;
9562557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMEJECT;
9572557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMEJECT_SW;
9582557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMMULTISESSION;
9592557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMPAUSE;
9602557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMPLAYMSF;
9612557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMPLAYTRKIND;
9622557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADAUDIO;
9632557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADCOOKED;
9642557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADMODE1;
9652557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADMODE2;
9662557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADRAW;
9672557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADTOCENTRY;
9682557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMREADTOCHDR;
9692557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMRESET;
9702557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMRESUME;
9712557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSEEK;
9722557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSTART;
9732557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSTOP;
9742557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMSUBCHNL;
9752557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMVOLCTRL;
9762557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROMVOLREAD;
9772557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CDROM_GET_UPC;
9782557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDCLRPRM;
9792557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDDEFPRM;
9802557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFLUSH;
9812557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFMTBEG;
9822557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFMTEND;
9832557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDFMTTRK;
9842557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETDRVPRM;
9852557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETDRVSTAT;
9862557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETDRVTYP;
9872557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETFDCSTAT;
9882557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETMAXERRS;
9892557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDGETPRM;
9902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDMSGOFF;
9912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDMSGON;
9922557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDPOLLDRVSTAT;
9932557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDRAWCMD;
9942557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDRESET;
9952557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETDRVPRM;
9962557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETEMSGTRESH;
9972557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETMAXERRS;
9982557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDSETPRM;
9992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDTWADDLE;
10002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDWERRORCLR;
10012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_FDWERRORGET;
10022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_DRIVE_CMD;
10032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GETGEO;
10042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_32BIT;
10052557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_DMA;
10062557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_IDENTITY;
10072557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS;
10082557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_MULTCOUNT;
10092557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_NOWERR;
10102557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_GET_UNMASKINTR;
10112557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_32BIT;
10122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_DMA;
10132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS;
10142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_MULTCOUNT;
10152557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_NOWERR;
10162557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_HDIO_SET_UNMASKINTR;
10172557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_MTIOCPOS;
10182557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGASYNCMAP;
10192557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGDEBUG;
10202557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGFLAGS;
10212557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGUNIT;
10222557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCGXASYNCMAP;
10232557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSASYNCMAP;
10242557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSDEBUG;
10252557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSFLAGS;
10262557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSMAXCID;
10272557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSMRU;
10282557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PPPIOCSXASYNCMAP;
10292557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDARP;
10302557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDRARP;
10312557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGARP;
10322557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFENCAP;
10332557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFHWADDR;
10342557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMAP;
10352557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFMEM;
10362557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFNAME;
10372557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGIFSLAVE;
10382557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGRARP;
10392557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCGSTAMP;
10402557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSARP;
10412557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFENCAP;
10422557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFHWADDR;
10432557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFLINK;
10442557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMAP;
10452557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFMEM;
10462557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSIFSLAVE;
10472557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCSRARP;
10482557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_HALT;
10492557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_LOAD;
10502557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RCODE;
10512557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RCVMSG;
10522557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RDATA;
10532557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RESET;
10542557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_RUN;
10552557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;
10562557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_WCODE;
10572557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_COPR_WDATA;
10582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCFLSH;
10592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCGETA;
10602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCGETS;
10612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSBRK;
10622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSBRKP;
10632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETA;
10642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETAF;
10652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETAW;
10662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETS;
10672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETSF;
10682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCSETSW;
10692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TCXONC;
10702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCGLCKTRMIOS;
10712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCGSOFTCAR;
10722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCINQ;
10732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCLINUX;
10742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERCONFIG;
10752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERGETLSR;
10762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERGWILD;
10772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSERSWILD;
10782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSLCKTRMIOS;
10792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_TIOCSSOFTCAR;
10802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_DISALLOCATE;
10812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_GETSTATE;
10822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_RESIZE;
10832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_RESIZEX;
10842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_VT_SENDSIG;
10852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX
10862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_LINUX || SANITIZER_FREEBSD
10872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_MTIOCGET;
10882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_MTIOCTOP;
10892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_SIOCADDRT;
10902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_SIOCDELRT;
10912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE;
10922557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETFMTS;
10932557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK;
10942557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_POST;
10952557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_RESET;
10962557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SETFMT;
10972557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT;
10982557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SPEED;
10992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_STEREO;
11002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE;
11012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_SYNC;
11022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE;
11032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR;
11042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_MIDI_INFO;
11052557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_MIDI_PRETIME;
11062557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE;
11072557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT;
11082557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT;
11092557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS;
11102557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS;
11112557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND;
11122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_PANIC;
11132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE;
11142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_RESET;
11152557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES;
11162557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_SYNC;
11172557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI;
11182557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD;
11192557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SYNTH_INFO;
11202557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL;
11212557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_CONTINUE;
11222557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_METRONOME;
11232557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_SELECT;
11242557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_SOURCE;
11252557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_START;
11262557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_STOP;
11272557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_TEMPO;
11282557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE;
11292557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM;
11302557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_BASS;
11312557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_CAPS;
11322557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_CD;
11332557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK;
11342557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE;
11352557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN;
11362557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_IMIX;
11372557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE1;
11382557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE2;
11392557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE3;
11402557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LINE;
11412557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_LOUD;
11422557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_MIC;
11432557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_MUTE;
11442557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN;
11452557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_PCM;
11462557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV;
11472557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK;
11482557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC;
11492557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER;
11502557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS;
11512557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH;
11522557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE;
11532557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME;
11542557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM;
11552557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS;
11562557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_CD;
11572557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE;
11582557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN;
11592557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX;
11602557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1;
11612557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2;
11622557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3;
11632557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE;
11642557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD;
11652557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC;
11662557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE;
11672557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN;
11682557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM;
11692557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV;
11702557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC;
11712557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER;
11722557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH;
11732557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE;
11742557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME;
11752557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_BITS;
11762557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS;
11772557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_FILTER;
11782557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_READ_RATE;
11792557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS;
11802557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER;
11812557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_ACTIVATE;
11822557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_GETMODE;
11832557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_OPENQRY;
11842557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_RELDISP;
11852557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_SETMODE;
11862557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_VT_WAITACTIVE;
11872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX || SANITIZER_FREEBSD
11882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
11892557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#if SANITIZER_LINUX && !SANITIZER_ANDROID
11902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETDEFTHRESH;
11912557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETDEFTIMEOUT;
11922557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETMON;
11932557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETTHRESH;
11942557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYGETTIMEOUT;
11952557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETDEFTHRESH;
11962557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETDEFTIMEOUT;
11972557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETTHRESH;
11982557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_CYSETTIMEOUT;
11992557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_EMANCIPATE;
12002557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_ENSLAVE;
12012557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_GETMASTRCFG;
12022557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_GETSLAVECFG;
12032557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_SETMASTRCFG;
12042557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_EQL_SETSLAVECFG;
12054612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGKEYCODE_V2;
12064612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCGPROP;
12074612abac2e172e077246cec0fcbed291f55a1d02Evgeniy Stepanov  extern unsigned IOCTL_EVIOCSKEYCODE_V2;
12087028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_GETFLAGS;
12097028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_GETVERSION;
12107028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_SETFLAGS;
12117028c1ee187302ace4fa3530769458c0b3caf946Evgeniy Stepanov  extern unsigned IOCTL_FS_IOC_SETVERSION;
12122557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_CMAP;
12132557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_FONT;
12142557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_UNIMAP;
12152557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_GIO_UNISCRNMAP;
12162557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDADDIO;
12172557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDDELIO;
12182557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGETKEYCODE;
12192557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBDIACR;
12202557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBENT;
12212557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBLED;
12222557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBMETA;
12232557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDGKBSENT;
12242557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDMAPDISP;
12252557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSETKEYCODE;
12262557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSIGACCEPT;
12272557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBDIACR;
12282557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBENT;
12292557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBLED;
12302557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBMETA;
12312557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDSKBSENT;
12322557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_KDUNMAPDISP;
12332557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPABORT;
12342557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPABORTOPEN;
12352557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPCAREFUL;
12362557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPCHAR;
12372557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPGETIRQ;
12382557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPGETSTATUS;
12392557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPRESET;
12402557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPSETIRQ;
12412557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPTIME;
12422557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_LPWAIT;
12438766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_MTIOCGETCONFIG;
12448766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_MTIOCSETCONFIG;
12452557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_CMAP;
12462557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_FONT;
12472557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_UNIMAP;
12482557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_UNIMAPCLR;
12492557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_PIO_UNISCRNMAP;
12502557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN;
12512557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST;
12522557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE;
12532557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE;
12542557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCAIPXITFCRT;
12552557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCAIPXPRISLT;
12568766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25ADDUID;
12578766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25DELUID;
12588766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25GETPARMS;
12598766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25GETUID;
12608766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25NOUID;
12618766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCAX25SETPARMS;
12622557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCDEVPLIP;
12632557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SIOCIPXCFGDATA;
12648766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRDECOBS;
12658766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRGETPARMS;
12668766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRRTCTL;
12678766b8162c8e0e2f57baf7aa47736f89aaaac9dcChandler Carruth  extern unsigned IOCTL_SIOCNRSETPARMS;
12682557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETISPACE;
12692557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE;
12702557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCGSERIAL;
12712557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSERGETMULTI;
12722557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSERSETMULTI;
12732557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov  extern unsigned IOCTL_TIOCSSERIAL;
12742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
12752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
12762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
12772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_GIO_SCRNMAP;
12782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDDISABIO;
12792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDENABIO;
12802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGETLED;
12812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGETMODE;
12822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGKBMODE;
12832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDGKBTYPE;
12842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDMKTONE;
12852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDSETLED;
12862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDSETMODE;
12872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KDSKBMODE;
12882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_KIOCSOUND;
12892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern unsigned IOCTL_PIO_SCRNMAP;
12902557a1b4517971c9cf1aff62425fc48561db9949Evgeniy Stepanov#endif
129170db33e143303752c7fe8800d15b5b31066b1e0dSergey Matveev
12922d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern const int errno_EINVAL;
129311f5309ec1bf13430c8a3a16f177d9e8e1190e38Dmitry Vyukov  extern const int errno_EOWNERDEAD;
12942d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
12952d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern const int si_SEGV_MAPERR;
12962d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern const int si_SEGV_ACCERR;
12979358c58d0aaf1b20f17362af354d4c3c1309276aEvgeniy Stepanov}  // namespace __sanitizer
129878c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov
1299bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov#define CHECK_TYPE_SIZE(TYPE) \
1300bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))
1301bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
1302bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov#define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
1303bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *) NULL)->MEMBER) == \
1304bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 sizeof(((CLASS *) NULL)->MEMBER));                \
1305bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) ==          \
1306bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 offsetof(CLASS, MEMBER))
1307bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
1308bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov// For sigaction, which is a function and struct at the same time,
1309bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov// and thus requires explicit "struct" in sizeof() expression.
1310bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov#define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
1311bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *) NULL)->MEMBER) == \
1312bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 sizeof(((struct CLASS *) NULL)->MEMBER));                \
1313bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov  COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) ==          \
1314bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov                 offsetof(struct CLASS, MEMBER))
1315bd65956821ebe3f4e1fb0b57892a5a443ad50c6fEvgeniy Stepanov
131678c56c3c407d2c92825c86e6af7a0230d6019a1cEvgeniy Stepanov#endif
1317