1*ee754c2dSkamil //===-- sanitizer_platform_limits_posix.h ---------------------------------===//
2*ee754c2dSkamil //
3*ee754c2dSkamil //                     The LLVM Compiler Infrastructure
4*ee754c2dSkamil //
5*ee754c2dSkamil // This file is distributed under the University of Illinois Open Source
6*ee754c2dSkamil // License. See LICENSE.TXT for details.
7*ee754c2dSkamil //
8*ee754c2dSkamil //===----------------------------------------------------------------------===//
9*ee754c2dSkamil //
10*ee754c2dSkamil // This file is a part of Sanitizer common code.
11*ee754c2dSkamil //
12*ee754c2dSkamil // Sizes and layouts of platform-specific POSIX data structures.
13*ee754c2dSkamil //===----------------------------------------------------------------------===//
14*ee754c2dSkamil 
15*ee754c2dSkamil #ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H
16*ee754c2dSkamil #define SANITIZER_PLATFORM_LIMITS_POSIX_H
17*ee754c2dSkamil 
18*ee754c2dSkamil #if SANITIZER_LINUX || SANITIZER_MAC
19*ee754c2dSkamil 
20*ee754c2dSkamil #include "sanitizer_internal_defs.h"
21*ee754c2dSkamil #include "sanitizer_platform.h"
22*ee754c2dSkamil 
23*ee754c2dSkamil # define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle))
24*ee754c2dSkamil 
25*ee754c2dSkamil #ifndef __GLIBC_PREREQ
26*ee754c2dSkamil #define __GLIBC_PREREQ(x, y) 0
27*ee754c2dSkamil #endif
28*ee754c2dSkamil 
29*ee754c2dSkamil namespace __sanitizer {
30*ee754c2dSkamil   extern unsigned struct_utsname_sz;
31*ee754c2dSkamil   extern unsigned struct_stat_sz;
32*ee754c2dSkamil #if !SANITIZER_IOS
33*ee754c2dSkamil   extern unsigned struct_stat64_sz;
34*ee754c2dSkamil #endif
35*ee754c2dSkamil   extern unsigned struct_rusage_sz;
36*ee754c2dSkamil   extern unsigned siginfo_t_sz;
37*ee754c2dSkamil   extern unsigned struct_itimerval_sz;
38*ee754c2dSkamil   extern unsigned pthread_t_sz;
39*ee754c2dSkamil   extern unsigned pthread_mutex_t_sz;
40*ee754c2dSkamil   extern unsigned pthread_cond_t_sz;
41*ee754c2dSkamil   extern unsigned pid_t_sz;
42*ee754c2dSkamil   extern unsigned timeval_sz;
43*ee754c2dSkamil   extern unsigned uid_t_sz;
44*ee754c2dSkamil   extern unsigned gid_t_sz;
45*ee754c2dSkamil   extern unsigned mbstate_t_sz;
46*ee754c2dSkamil   extern unsigned struct_timezone_sz;
47*ee754c2dSkamil   extern unsigned struct_tms_sz;
48*ee754c2dSkamil   extern unsigned struct_itimerspec_sz;
49*ee754c2dSkamil   extern unsigned struct_sigevent_sz;
50*ee754c2dSkamil   extern unsigned struct_sched_param_sz;
51*ee754c2dSkamil   extern unsigned struct_statfs64_sz;
52*ee754c2dSkamil   extern unsigned struct_regex_sz;
53*ee754c2dSkamil   extern unsigned struct_regmatch_sz;
54*ee754c2dSkamil 
55*ee754c2dSkamil #if !SANITIZER_ANDROID
56*ee754c2dSkamil   extern unsigned struct_fstab_sz;
57*ee754c2dSkamil   extern unsigned struct_statfs_sz;
58*ee754c2dSkamil   extern unsigned struct_sockaddr_sz;
59*ee754c2dSkamil   extern unsigned ucontext_t_sz;
60*ee754c2dSkamil #endif // !SANITIZER_ANDROID
61*ee754c2dSkamil 
62*ee754c2dSkamil #if SANITIZER_LINUX
63*ee754c2dSkamil 
64*ee754c2dSkamil #if defined(__x86_64__)
65*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 144;
66*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 0;
67*ee754c2dSkamil #elif defined(__i386__)
68*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 64;
69*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 96;
70*ee754c2dSkamil #elif defined(__arm__)
71*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 64;
72*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 104;
73*ee754c2dSkamil #elif defined(__aarch64__)
74*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 128;
75*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 104;
76*ee754c2dSkamil #elif defined(__powerpc__) && !defined(__powerpc64__)
77*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 72;
78*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 104;
79*ee754c2dSkamil #elif defined(__powerpc64__)
80*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 144;
81*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 104;
82*ee754c2dSkamil #elif defined(__mips__)
83*ee754c2dSkamil   const unsigned struct_kernel_stat_sz =
84*ee754c2dSkamil                  SANITIZER_ANDROID ? FIRST_32_SECOND_64(104, 128) :
85*ee754c2dSkamil                                      FIRST_32_SECOND_64(160, 216);
86*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 104;
87*ee754c2dSkamil #elif defined(__s390__) && !defined(__s390x__)
88*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 64;
89*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 104;
90*ee754c2dSkamil #elif defined(__s390x__)
91*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 144;
92*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 0;
93*ee754c2dSkamil #elif defined(__sparc__) && defined(__arch64__)
94*ee754c2dSkamil   const unsigned struct___old_kernel_stat_sz = 0;
95*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 104;
96*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 144;
97*ee754c2dSkamil #elif defined(__sparc__) && !defined(__arch64__)
98*ee754c2dSkamil   const unsigned struct___old_kernel_stat_sz = 0;
99*ee754c2dSkamil   const unsigned struct_kernel_stat_sz = 64;
100*ee754c2dSkamil   const unsigned struct_kernel_stat64_sz = 104;
101*ee754c2dSkamil #endif
102*ee754c2dSkamil   struct __sanitizer_perf_event_attr {
103*ee754c2dSkamil     unsigned type;
104*ee754c2dSkamil     unsigned size;
105*ee754c2dSkamil     // More fields that vary with the kernel version.
106*ee754c2dSkamil   };
107*ee754c2dSkamil 
108*ee754c2dSkamil   extern unsigned struct_epoll_event_sz;
109*ee754c2dSkamil   extern unsigned struct_sysinfo_sz;
110*ee754c2dSkamil   extern unsigned __user_cap_header_struct_sz;
111*ee754c2dSkamil   extern unsigned __user_cap_data_struct_sz;
112*ee754c2dSkamil   extern unsigned struct_new_utsname_sz;
113*ee754c2dSkamil   extern unsigned struct_old_utsname_sz;
114*ee754c2dSkamil   extern unsigned struct_oldold_utsname_sz;
115*ee754c2dSkamil 
116*ee754c2dSkamil   const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long);
117*ee754c2dSkamil #endif  // SANITIZER_LINUX
118*ee754c2dSkamil 
119*ee754c2dSkamil #if SANITIZER_LINUX
120*ee754c2dSkamil 
121*ee754c2dSkamil #if defined(__powerpc64__) || defined(__s390__)
122*ee754c2dSkamil   const unsigned struct___old_kernel_stat_sz = 0;
123*ee754c2dSkamil #elif !defined(__sparc__)
124*ee754c2dSkamil   const unsigned struct___old_kernel_stat_sz = 32;
125*ee754c2dSkamil #endif
126*ee754c2dSkamil 
127*ee754c2dSkamil   extern unsigned struct_rlimit_sz;
128*ee754c2dSkamil   extern unsigned struct_utimbuf_sz;
129*ee754c2dSkamil   extern unsigned struct_timespec_sz;
130*ee754c2dSkamil 
131*ee754c2dSkamil   struct __sanitizer_iocb {
132*ee754c2dSkamil     u64   aio_data;
133*ee754c2dSkamil     u32   aio_key_or_aio_reserved1; // Simply crazy.
134*ee754c2dSkamil     u32   aio_reserved1_or_aio_key; // Luckily, we don't need these.
135*ee754c2dSkamil     u16   aio_lio_opcode;
136*ee754c2dSkamil     s16   aio_reqprio;
137*ee754c2dSkamil     u32   aio_fildes;
138*ee754c2dSkamil     u64   aio_buf;
139*ee754c2dSkamil     u64   aio_nbytes;
140*ee754c2dSkamil     s64   aio_offset;
141*ee754c2dSkamil     u64   aio_reserved2;
142*ee754c2dSkamil     u64   aio_reserved3;
143*ee754c2dSkamil   };
144*ee754c2dSkamil 
145*ee754c2dSkamil   struct __sanitizer_io_event {
146*ee754c2dSkamil     u64 data;
147*ee754c2dSkamil     u64 obj;
148*ee754c2dSkamil     u64 res;
149*ee754c2dSkamil     u64 res2;
150*ee754c2dSkamil   };
151*ee754c2dSkamil 
152*ee754c2dSkamil   const unsigned iocb_cmd_pread = 0;
153*ee754c2dSkamil   const unsigned iocb_cmd_pwrite = 1;
154*ee754c2dSkamil   const unsigned iocb_cmd_preadv = 7;
155*ee754c2dSkamil   const unsigned iocb_cmd_pwritev = 8;
156*ee754c2dSkamil 
157*ee754c2dSkamil   struct __sanitizer___sysctl_args {
158*ee754c2dSkamil     int *name;
159*ee754c2dSkamil     int nlen;
160*ee754c2dSkamil     void *oldval;
161*ee754c2dSkamil     uptr *oldlenp;
162*ee754c2dSkamil     void *newval;
163*ee754c2dSkamil     uptr newlen;
164*ee754c2dSkamil     unsigned long ___unused[4];
165*ee754c2dSkamil   };
166*ee754c2dSkamil 
167*ee754c2dSkamil   const unsigned old_sigset_t_sz = sizeof(unsigned long);
168*ee754c2dSkamil 
169*ee754c2dSkamil   struct __sanitizer_sem_t {
170*ee754c2dSkamil #if SANITIZER_ANDROID && defined(_LP64)
171*ee754c2dSkamil     int data[4];
172*ee754c2dSkamil #elif SANITIZER_ANDROID && !defined(_LP64)
173*ee754c2dSkamil     int data;
174*ee754c2dSkamil #elif SANITIZER_LINUX
175*ee754c2dSkamil     uptr data[4];
176*ee754c2dSkamil #endif
177*ee754c2dSkamil   };
178*ee754c2dSkamil #endif // SANITIZER_LINUX
179*ee754c2dSkamil 
180*ee754c2dSkamil #if SANITIZER_ANDROID
181*ee754c2dSkamil   struct __sanitizer_struct_mallinfo {
182*ee754c2dSkamil     uptr v[10];
183*ee754c2dSkamil   };
184*ee754c2dSkamil #endif
185*ee754c2dSkamil 
186*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
187*ee754c2dSkamil   struct __sanitizer_struct_mallinfo {
188*ee754c2dSkamil     int v[10];
189*ee754c2dSkamil   };
190*ee754c2dSkamil 
191*ee754c2dSkamil   extern unsigned struct_ustat_sz;
192*ee754c2dSkamil   extern unsigned struct_rlimit64_sz;
193*ee754c2dSkamil   extern unsigned struct_statvfs64_sz;
194*ee754c2dSkamil 
195*ee754c2dSkamil   struct __sanitizer_ipc_perm {
196*ee754c2dSkamil     int __key;
197*ee754c2dSkamil     int uid;
198*ee754c2dSkamil     int gid;
199*ee754c2dSkamil     int cuid;
200*ee754c2dSkamil     int cgid;
201*ee754c2dSkamil #ifdef __powerpc__
202*ee754c2dSkamil     unsigned mode;
203*ee754c2dSkamil     unsigned __seq;
204*ee754c2dSkamil     u64 __unused1;
205*ee754c2dSkamil     u64 __unused2;
206*ee754c2dSkamil #elif defined(__sparc__)
207*ee754c2dSkamil #if defined(__arch64__)
208*ee754c2dSkamil     unsigned mode;
209*ee754c2dSkamil     unsigned short __pad1;
210*ee754c2dSkamil #else
211*ee754c2dSkamil     unsigned short __pad1;
212*ee754c2dSkamil     unsigned short mode;
213*ee754c2dSkamil     unsigned short __pad2;
214*ee754c2dSkamil #endif
215*ee754c2dSkamil     unsigned short __seq;
216*ee754c2dSkamil     unsigned long long __unused1;
217*ee754c2dSkamil     unsigned long long __unused2;
218*ee754c2dSkamil #elif defined(__mips__) || defined(__aarch64__) || defined(__s390x__)
219*ee754c2dSkamil     unsigned int mode;
220*ee754c2dSkamil     unsigned short __seq;
221*ee754c2dSkamil     unsigned short __pad1;
222*ee754c2dSkamil     unsigned long __unused1;
223*ee754c2dSkamil     unsigned long __unused2;
224*ee754c2dSkamil #else
225*ee754c2dSkamil     unsigned short mode;
226*ee754c2dSkamil     unsigned short __pad1;
227*ee754c2dSkamil     unsigned short __seq;
228*ee754c2dSkamil     unsigned short __pad2;
229*ee754c2dSkamil #if defined(__x86_64__) && !defined(_LP64)
230*ee754c2dSkamil     u64 __unused1;
231*ee754c2dSkamil     u64 __unused2;
232*ee754c2dSkamil #else
233*ee754c2dSkamil     unsigned long __unused1;
234*ee754c2dSkamil     unsigned long __unused2;
235*ee754c2dSkamil #endif
236*ee754c2dSkamil #endif
237*ee754c2dSkamil   };
238*ee754c2dSkamil 
239*ee754c2dSkamil   struct __sanitizer_shmid_ds {
240*ee754c2dSkamil     __sanitizer_ipc_perm shm_perm;
241*ee754c2dSkamil   #if defined(__sparc__)
242*ee754c2dSkamil   #if !defined(__arch64__)
243*ee754c2dSkamil     u32 __pad1;
244*ee754c2dSkamil   #endif
245*ee754c2dSkamil     long shm_atime;
246*ee754c2dSkamil   #if !defined(__arch64__)
247*ee754c2dSkamil     u32 __pad2;
248*ee754c2dSkamil   #endif
249*ee754c2dSkamil     long shm_dtime;
250*ee754c2dSkamil   #if !defined(__arch64__)
251*ee754c2dSkamil     u32 __pad3;
252*ee754c2dSkamil   #endif
253*ee754c2dSkamil     long shm_ctime;
254*ee754c2dSkamil     uptr shm_segsz;
255*ee754c2dSkamil     int shm_cpid;
256*ee754c2dSkamil     int shm_lpid;
257*ee754c2dSkamil     unsigned long shm_nattch;
258*ee754c2dSkamil     unsigned long __glibc_reserved1;
259*ee754c2dSkamil     unsigned long __glibc_reserved2;
260*ee754c2dSkamil   #else
261*ee754c2dSkamil   #ifndef __powerpc__
262*ee754c2dSkamil     uptr shm_segsz;
263*ee754c2dSkamil   #elif !defined(__powerpc64__)
264*ee754c2dSkamil     uptr __unused0;
265*ee754c2dSkamil   #endif
266*ee754c2dSkamil   #if defined(__x86_64__) && !defined(_LP64)
267*ee754c2dSkamil     u64 shm_atime;
268*ee754c2dSkamil     u64 shm_dtime;
269*ee754c2dSkamil     u64 shm_ctime;
270*ee754c2dSkamil   #else
271*ee754c2dSkamil     uptr shm_atime;
272*ee754c2dSkamil   #if !defined(_LP64) && !defined(__mips__)
273*ee754c2dSkamil     uptr __unused1;
274*ee754c2dSkamil   #endif
275*ee754c2dSkamil     uptr shm_dtime;
276*ee754c2dSkamil   #if !defined(_LP64) && !defined(__mips__)
277*ee754c2dSkamil     uptr __unused2;
278*ee754c2dSkamil   #endif
279*ee754c2dSkamil     uptr shm_ctime;
280*ee754c2dSkamil   #if !defined(_LP64) && !defined(__mips__)
281*ee754c2dSkamil     uptr __unused3;
282*ee754c2dSkamil   #endif
283*ee754c2dSkamil   #endif
284*ee754c2dSkamil   #ifdef __powerpc__
285*ee754c2dSkamil     uptr shm_segsz;
286*ee754c2dSkamil   #endif
287*ee754c2dSkamil     int shm_cpid;
288*ee754c2dSkamil     int shm_lpid;
289*ee754c2dSkamil   #if defined(__x86_64__) && !defined(_LP64)
290*ee754c2dSkamil     u64 shm_nattch;
291*ee754c2dSkamil     u64 __unused4;
292*ee754c2dSkamil     u64 __unused5;
293*ee754c2dSkamil   #else
294*ee754c2dSkamil     uptr shm_nattch;
295*ee754c2dSkamil     uptr __unused4;
296*ee754c2dSkamil     uptr __unused5;
297*ee754c2dSkamil   #endif
298*ee754c2dSkamil #endif
299*ee754c2dSkamil   };
300*ee754c2dSkamil #endif
301*ee754c2dSkamil 
302*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
303*ee754c2dSkamil   extern unsigned struct_msqid_ds_sz;
304*ee754c2dSkamil   extern unsigned struct_mq_attr_sz;
305*ee754c2dSkamil   extern unsigned struct_timex_sz;
306*ee754c2dSkamil   extern unsigned struct_statvfs_sz;
307*ee754c2dSkamil #endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
308*ee754c2dSkamil 
309*ee754c2dSkamil   struct __sanitizer_iovec {
310*ee754c2dSkamil     void *iov_base;
311*ee754c2dSkamil     uptr iov_len;
312*ee754c2dSkamil   };
313*ee754c2dSkamil 
314*ee754c2dSkamil #if !SANITIZER_ANDROID
315*ee754c2dSkamil   struct __sanitizer_ifaddrs {
316*ee754c2dSkamil     struct __sanitizer_ifaddrs *ifa_next;
317*ee754c2dSkamil     char *ifa_name;
318*ee754c2dSkamil     unsigned int ifa_flags;
319*ee754c2dSkamil     void *ifa_addr;    // (struct sockaddr *)
320*ee754c2dSkamil     void *ifa_netmask; // (struct sockaddr *)
321*ee754c2dSkamil     // This is a union on Linux.
322*ee754c2dSkamil # ifdef ifa_dstaddr
323*ee754c2dSkamil # undef ifa_dstaddr
324*ee754c2dSkamil # endif
325*ee754c2dSkamil     void *ifa_dstaddr; // (struct sockaddr *)
326*ee754c2dSkamil     void *ifa_data;
327*ee754c2dSkamil   };
328*ee754c2dSkamil #endif  // !SANITIZER_ANDROID
329*ee754c2dSkamil 
330*ee754c2dSkamil #if SANITIZER_MAC
331*ee754c2dSkamil   typedef unsigned long __sanitizer_pthread_key_t;
332*ee754c2dSkamil #else
333*ee754c2dSkamil   typedef unsigned __sanitizer_pthread_key_t;
334*ee754c2dSkamil #endif
335*ee754c2dSkamil 
336*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
337*ee754c2dSkamil 
338*ee754c2dSkamil   struct __sanitizer_XDR {
339*ee754c2dSkamil     int x_op;
340*ee754c2dSkamil     void *x_ops;
341*ee754c2dSkamil     uptr x_public;
342*ee754c2dSkamil     uptr x_private;
343*ee754c2dSkamil     uptr x_base;
344*ee754c2dSkamil     unsigned x_handy;
345*ee754c2dSkamil   };
346*ee754c2dSkamil 
347*ee754c2dSkamil   const int __sanitizer_XDR_ENCODE = 0;
348*ee754c2dSkamil   const int __sanitizer_XDR_DECODE = 1;
349*ee754c2dSkamil   const int __sanitizer_XDR_FREE = 2;
350*ee754c2dSkamil #endif
351*ee754c2dSkamil 
352*ee754c2dSkamil   struct __sanitizer_passwd {
353*ee754c2dSkamil     char *pw_name;
354*ee754c2dSkamil     char *pw_passwd;
355*ee754c2dSkamil     int pw_uid;
356*ee754c2dSkamil     int pw_gid;
357*ee754c2dSkamil #if SANITIZER_MAC
358*ee754c2dSkamil     long pw_change;
359*ee754c2dSkamil     char *pw_class;
360*ee754c2dSkamil #endif
361*ee754c2dSkamil #if !(SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32))
362*ee754c2dSkamil     char *pw_gecos;
363*ee754c2dSkamil #endif
364*ee754c2dSkamil     char *pw_dir;
365*ee754c2dSkamil     char *pw_shell;
366*ee754c2dSkamil #if SANITIZER_MAC
367*ee754c2dSkamil     long pw_expire;
368*ee754c2dSkamil #endif
369*ee754c2dSkamil   };
370*ee754c2dSkamil 
371*ee754c2dSkamil   struct __sanitizer_group {
372*ee754c2dSkamil     char *gr_name;
373*ee754c2dSkamil     char *gr_passwd;
374*ee754c2dSkamil     int gr_gid;
375*ee754c2dSkamil     char **gr_mem;
376*ee754c2dSkamil   };
377*ee754c2dSkamil 
378*ee754c2dSkamil #if defined(__x86_64__) && !defined(_LP64)
379*ee754c2dSkamil   typedef long long __sanitizer_time_t;
380*ee754c2dSkamil #else
381*ee754c2dSkamil   typedef long __sanitizer_time_t;
382*ee754c2dSkamil #endif
383*ee754c2dSkamil 
384*ee754c2dSkamil   typedef long __sanitizer_suseconds_t;
385*ee754c2dSkamil 
386*ee754c2dSkamil   struct __sanitizer_timeval {
387*ee754c2dSkamil     __sanitizer_time_t tv_sec;
388*ee754c2dSkamil     __sanitizer_suseconds_t tv_usec;
389*ee754c2dSkamil   };
390*ee754c2dSkamil 
391*ee754c2dSkamil   struct __sanitizer_itimerval {
392*ee754c2dSkamil     struct __sanitizer_timeval it_interval;
393*ee754c2dSkamil     struct __sanitizer_timeval it_value;
394*ee754c2dSkamil   };
395*ee754c2dSkamil 
396*ee754c2dSkamil   struct __sanitizer_timeb {
397*ee754c2dSkamil     __sanitizer_time_t time;
398*ee754c2dSkamil     unsigned short millitm;
399*ee754c2dSkamil     short timezone;
400*ee754c2dSkamil     short dstflag;
401*ee754c2dSkamil   };
402*ee754c2dSkamil 
403*ee754c2dSkamil   struct __sanitizer_ether_addr {
404*ee754c2dSkamil     u8 octet[6];
405*ee754c2dSkamil   };
406*ee754c2dSkamil 
407*ee754c2dSkamil   struct __sanitizer_tm {
408*ee754c2dSkamil     int tm_sec;
409*ee754c2dSkamil     int tm_min;
410*ee754c2dSkamil     int tm_hour;
411*ee754c2dSkamil     int tm_mday;
412*ee754c2dSkamil     int tm_mon;
413*ee754c2dSkamil     int tm_year;
414*ee754c2dSkamil     int tm_wday;
415*ee754c2dSkamil     int tm_yday;
416*ee754c2dSkamil     int tm_isdst;
417*ee754c2dSkamil     long int tm_gmtoff;
418*ee754c2dSkamil     const char *tm_zone;
419*ee754c2dSkamil   };
420*ee754c2dSkamil 
421*ee754c2dSkamil #if SANITIZER_LINUX
422*ee754c2dSkamil   struct __sanitizer_mntent {
423*ee754c2dSkamil     char *mnt_fsname;
424*ee754c2dSkamil     char *mnt_dir;
425*ee754c2dSkamil     char *mnt_type;
426*ee754c2dSkamil     char *mnt_opts;
427*ee754c2dSkamil     int mnt_freq;
428*ee754c2dSkamil     int mnt_passno;
429*ee754c2dSkamil   };
430*ee754c2dSkamil 
431*ee754c2dSkamil   struct __sanitizer_file_handle {
432*ee754c2dSkamil     unsigned int handle_bytes;
433*ee754c2dSkamil     int handle_type;
434*ee754c2dSkamil     unsigned char f_handle[1];  // variable sized
435*ee754c2dSkamil   };
436*ee754c2dSkamil #endif
437*ee754c2dSkamil 
438*ee754c2dSkamil #if SANITIZER_MAC
439*ee754c2dSkamil   struct __sanitizer_msghdr {
440*ee754c2dSkamil     void *msg_name;
441*ee754c2dSkamil     unsigned msg_namelen;
442*ee754c2dSkamil     struct __sanitizer_iovec *msg_iov;
443*ee754c2dSkamil     unsigned msg_iovlen;
444*ee754c2dSkamil     void *msg_control;
445*ee754c2dSkamil     unsigned msg_controllen;
446*ee754c2dSkamil     int msg_flags;
447*ee754c2dSkamil   };
448*ee754c2dSkamil   struct __sanitizer_cmsghdr {
449*ee754c2dSkamil     unsigned cmsg_len;
450*ee754c2dSkamil     int cmsg_level;
451*ee754c2dSkamil     int cmsg_type;
452*ee754c2dSkamil   };
453*ee754c2dSkamil #else
454*ee754c2dSkamil   struct __sanitizer_msghdr {
455*ee754c2dSkamil     void *msg_name;
456*ee754c2dSkamil     unsigned msg_namelen;
457*ee754c2dSkamil     struct __sanitizer_iovec *msg_iov;
458*ee754c2dSkamil     uptr msg_iovlen;
459*ee754c2dSkamil     void *msg_control;
460*ee754c2dSkamil     uptr msg_controllen;
461*ee754c2dSkamil     int msg_flags;
462*ee754c2dSkamil   };
463*ee754c2dSkamil   struct __sanitizer_cmsghdr {
464*ee754c2dSkamil     uptr cmsg_len;
465*ee754c2dSkamil     int cmsg_level;
466*ee754c2dSkamil     int cmsg_type;
467*ee754c2dSkamil   };
468*ee754c2dSkamil #endif
469*ee754c2dSkamil 
470*ee754c2dSkamil #if SANITIZER_LINUX
471*ee754c2dSkamil   struct __sanitizer_mmsghdr {
472*ee754c2dSkamil     __sanitizer_msghdr msg_hdr;
473*ee754c2dSkamil     unsigned int msg_len;
474*ee754c2dSkamil   };
475*ee754c2dSkamil #endif
476*ee754c2dSkamil 
477*ee754c2dSkamil #if SANITIZER_MAC
478*ee754c2dSkamil   struct __sanitizer_dirent {
479*ee754c2dSkamil     unsigned long long d_ino;
480*ee754c2dSkamil     unsigned long long d_seekoff;
481*ee754c2dSkamil     unsigned short d_reclen;
482*ee754c2dSkamil     // more fields that we don't care about
483*ee754c2dSkamil   };
484*ee754c2dSkamil #elif SANITIZER_ANDROID || defined(__x86_64__)
485*ee754c2dSkamil   struct __sanitizer_dirent {
486*ee754c2dSkamil     unsigned long long d_ino;
487*ee754c2dSkamil     unsigned long long d_off;
488*ee754c2dSkamil     unsigned short d_reclen;
489*ee754c2dSkamil     // more fields that we don't care about
490*ee754c2dSkamil   };
491*ee754c2dSkamil #else
492*ee754c2dSkamil   struct __sanitizer_dirent {
493*ee754c2dSkamil     uptr d_ino;
494*ee754c2dSkamil     uptr d_off;
495*ee754c2dSkamil     unsigned short d_reclen;
496*ee754c2dSkamil     // more fields that we don't care about
497*ee754c2dSkamil   };
498*ee754c2dSkamil #endif
499*ee754c2dSkamil 
500*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
501*ee754c2dSkamil   struct __sanitizer_dirent64 {
502*ee754c2dSkamil     unsigned long long d_ino;
503*ee754c2dSkamil     unsigned long long d_off;
504*ee754c2dSkamil     unsigned short d_reclen;
505*ee754c2dSkamil     // more fields that we don't care about
506*ee754c2dSkamil   };
507*ee754c2dSkamil #endif
508*ee754c2dSkamil 
509*ee754c2dSkamil #if defined(__x86_64__) && !defined(_LP64)
510*ee754c2dSkamil   typedef long long __sanitizer_clock_t;
511*ee754c2dSkamil #else
512*ee754c2dSkamil   typedef long __sanitizer_clock_t;
513*ee754c2dSkamil #endif
514*ee754c2dSkamil 
515*ee754c2dSkamil #if SANITIZER_LINUX
516*ee754c2dSkamil   typedef int __sanitizer_clockid_t;
517*ee754c2dSkamil #endif
518*ee754c2dSkamil 
519*ee754c2dSkamil #if SANITIZER_LINUX
520*ee754c2dSkamil #if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__)\
521*ee754c2dSkamil                    || defined(__mips__)
522*ee754c2dSkamil   typedef unsigned __sanitizer___kernel_uid_t;
523*ee754c2dSkamil   typedef unsigned __sanitizer___kernel_gid_t;
524*ee754c2dSkamil #else
525*ee754c2dSkamil   typedef unsigned short __sanitizer___kernel_uid_t;
526*ee754c2dSkamil   typedef unsigned short __sanitizer___kernel_gid_t;
527*ee754c2dSkamil #endif
528*ee754c2dSkamil #if defined(__x86_64__) && !defined(_LP64)
529*ee754c2dSkamil   typedef long long __sanitizer___kernel_off_t;
530*ee754c2dSkamil #else
531*ee754c2dSkamil   typedef long __sanitizer___kernel_off_t;
532*ee754c2dSkamil #endif
533*ee754c2dSkamil 
534*ee754c2dSkamil #if defined(__powerpc__) || defined(__mips__)
535*ee754c2dSkamil   typedef unsigned int __sanitizer___kernel_old_uid_t;
536*ee754c2dSkamil   typedef unsigned int __sanitizer___kernel_old_gid_t;
537*ee754c2dSkamil #else
538*ee754c2dSkamil   typedef unsigned short __sanitizer___kernel_old_uid_t;
539*ee754c2dSkamil   typedef unsigned short __sanitizer___kernel_old_gid_t;
540*ee754c2dSkamil #endif
541*ee754c2dSkamil 
542*ee754c2dSkamil   typedef long long __sanitizer___kernel_loff_t;
543*ee754c2dSkamil   typedef struct {
544*ee754c2dSkamil     unsigned long fds_bits[1024 / (8 * sizeof(long))];
545*ee754c2dSkamil   } __sanitizer___kernel_fd_set;
546*ee754c2dSkamil #endif
547*ee754c2dSkamil 
548*ee754c2dSkamil   // This thing depends on the platform. We are only interested in the upper
549*ee754c2dSkamil   // limit. Verified with a compiler assert in .cc.
550*ee754c2dSkamil   const int pthread_attr_t_max_sz = 128;
551*ee754c2dSkamil   union __sanitizer_pthread_attr_t {
552*ee754c2dSkamil     char size[pthread_attr_t_max_sz]; // NOLINT
553*ee754c2dSkamil     void *align;
554*ee754c2dSkamil   };
555*ee754c2dSkamil 
556*ee754c2dSkamil #if SANITIZER_ANDROID
557*ee754c2dSkamil # if SANITIZER_MIPS
558*ee754c2dSkamil   typedef unsigned long __sanitizer_sigset_t[16/sizeof(unsigned long)];
559*ee754c2dSkamil # else
560*ee754c2dSkamil   typedef unsigned long __sanitizer_sigset_t;
561*ee754c2dSkamil # endif
562*ee754c2dSkamil #elif SANITIZER_MAC
563*ee754c2dSkamil   typedef unsigned __sanitizer_sigset_t;
564*ee754c2dSkamil #elif SANITIZER_LINUX
565*ee754c2dSkamil   struct __sanitizer_sigset_t {
566*ee754c2dSkamil     // The size is determined by looking at sizeof of real sigset_t on linux.
567*ee754c2dSkamil     uptr val[128 / sizeof(uptr)];
568*ee754c2dSkamil   };
569*ee754c2dSkamil #endif
570*ee754c2dSkamil 
571*ee754c2dSkamil   struct __sanitizer_siginfo {
572*ee754c2dSkamil     // The size is determined by looking at sizeof of real siginfo_t on linux.
573*ee754c2dSkamil     u64 opaque[128 / sizeof(u64)];
574*ee754c2dSkamil   };
575*ee754c2dSkamil 
576*ee754c2dSkamil   using __sanitizer_sighandler_ptr = void (*)(int sig);
577*ee754c2dSkamil   using __sanitizer_sigactionhandler_ptr =
578*ee754c2dSkamil       void (*)(int sig, __sanitizer_siginfo *siginfo, void *uctx);
579*ee754c2dSkamil 
580*ee754c2dSkamil   // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
581*ee754c2dSkamil #if SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 64)
582*ee754c2dSkamil   struct __sanitizer_sigaction {
583*ee754c2dSkamil     unsigned sa_flags;
584*ee754c2dSkamil     union {
585*ee754c2dSkamil       __sanitizer_sigactionhandler_ptr sigaction;
586*ee754c2dSkamil       __sanitizer_sighandler_ptr handler;
587*ee754c2dSkamil     };
588*ee754c2dSkamil     __sanitizer_sigset_t sa_mask;
589*ee754c2dSkamil     void (*sa_restorer)();
590*ee754c2dSkamil   };
591*ee754c2dSkamil #elif SANITIZER_ANDROID && SANITIZER_MIPS32  // check this before WORDSIZE == 32
592*ee754c2dSkamil   struct __sanitizer_sigaction {
593*ee754c2dSkamil     unsigned sa_flags;
594*ee754c2dSkamil     union {
595*ee754c2dSkamil       __sanitizer_sigactionhandler_ptr sigaction;
596*ee754c2dSkamil       __sanitizer_sighandler_ptr handler;
597*ee754c2dSkamil     };
598*ee754c2dSkamil     __sanitizer_sigset_t sa_mask;
599*ee754c2dSkamil   };
600*ee754c2dSkamil #elif SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32)
601*ee754c2dSkamil   struct __sanitizer_sigaction {
602*ee754c2dSkamil     union {
603*ee754c2dSkamil       __sanitizer_sigactionhandler_ptr sigaction;
604*ee754c2dSkamil       __sanitizer_sighandler_ptr handler;
605*ee754c2dSkamil     };
606*ee754c2dSkamil     __sanitizer_sigset_t sa_mask;
607*ee754c2dSkamil     uptr sa_flags;
608*ee754c2dSkamil     void (*sa_restorer)();
609*ee754c2dSkamil   };
610*ee754c2dSkamil #else // !SANITIZER_ANDROID
611*ee754c2dSkamil   struct __sanitizer_sigaction {
612*ee754c2dSkamil #if defined(__mips__) && !SANITIZER_FREEBSD
613*ee754c2dSkamil     unsigned int sa_flags;
614*ee754c2dSkamil #endif
615*ee754c2dSkamil     union {
616*ee754c2dSkamil       __sanitizer_sigactionhandler_ptr sigaction;
617*ee754c2dSkamil       __sanitizer_sighandler_ptr handler;
618*ee754c2dSkamil     };
619*ee754c2dSkamil #if SANITIZER_FREEBSD
620*ee754c2dSkamil     int sa_flags;
621*ee754c2dSkamil     __sanitizer_sigset_t sa_mask;
622*ee754c2dSkamil #else
623*ee754c2dSkamil #if defined(__s390x__)
624*ee754c2dSkamil     int sa_resv;
625*ee754c2dSkamil #else
626*ee754c2dSkamil     __sanitizer_sigset_t sa_mask;
627*ee754c2dSkamil #endif
628*ee754c2dSkamil #ifndef __mips__
629*ee754c2dSkamil #if defined(__sparc__)
630*ee754c2dSkamil #if __GLIBC_PREREQ (2, 20)
631*ee754c2dSkamil     // On sparc glibc 2.19 and earlier sa_flags was unsigned long.
632*ee754c2dSkamil #if defined(__arch64__)
633*ee754c2dSkamil     // To maintain ABI compatibility on sparc64 when switching to an int,
634*ee754c2dSkamil     // __glibc_reserved0 was added.
635*ee754c2dSkamil     int __glibc_reserved0;
636*ee754c2dSkamil #endif
637*ee754c2dSkamil     int sa_flags;
638*ee754c2dSkamil #else
639*ee754c2dSkamil     unsigned long sa_flags;
640*ee754c2dSkamil #endif
641*ee754c2dSkamil #else
642*ee754c2dSkamil     int sa_flags;
643*ee754c2dSkamil #endif
644*ee754c2dSkamil #endif
645*ee754c2dSkamil #endif
646*ee754c2dSkamil #if SANITIZER_LINUX
647*ee754c2dSkamil     void (*sa_restorer)();
648*ee754c2dSkamil #endif
649*ee754c2dSkamil #if defined(__mips__) && (SANITIZER_WORDSIZE == 32)
650*ee754c2dSkamil     int sa_resv[1];
651*ee754c2dSkamil #endif
652*ee754c2dSkamil #if defined(__s390x__)
653*ee754c2dSkamil     __sanitizer_sigset_t sa_mask;
654*ee754c2dSkamil #endif
655*ee754c2dSkamil   };
656*ee754c2dSkamil #endif // !SANITIZER_ANDROID
657*ee754c2dSkamil 
658*ee754c2dSkamil #if defined(__mips__)
659*ee754c2dSkamil   struct __sanitizer_kernel_sigset_t {
660*ee754c2dSkamil     uptr sig[2];
661*ee754c2dSkamil   };
662*ee754c2dSkamil #else
663*ee754c2dSkamil   struct __sanitizer_kernel_sigset_t {
664*ee754c2dSkamil     u8 sig[8];
665*ee754c2dSkamil   };
666*ee754c2dSkamil #endif
667*ee754c2dSkamil 
668*ee754c2dSkamil   // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
669*ee754c2dSkamil #if SANITIZER_MIPS
670*ee754c2dSkamil   struct __sanitizer_kernel_sigaction_t {
671*ee754c2dSkamil     unsigned int sa_flags;
672*ee754c2dSkamil     union {
673*ee754c2dSkamil       void (*handler)(int signo);
674*ee754c2dSkamil       void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx);
675*ee754c2dSkamil     };
676*ee754c2dSkamil     __sanitizer_kernel_sigset_t sa_mask;
677*ee754c2dSkamil     void (*sa_restorer)(void);
678*ee754c2dSkamil   };
679*ee754c2dSkamil #else
680*ee754c2dSkamil   struct __sanitizer_kernel_sigaction_t {
681*ee754c2dSkamil     union {
682*ee754c2dSkamil       void (*handler)(int signo);
683*ee754c2dSkamil       void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx);
684*ee754c2dSkamil     };
685*ee754c2dSkamil     unsigned long sa_flags;
686*ee754c2dSkamil     void (*sa_restorer)(void);
687*ee754c2dSkamil     __sanitizer_kernel_sigset_t sa_mask;
688*ee754c2dSkamil   };
689*ee754c2dSkamil #endif
690*ee754c2dSkamil 
691*ee754c2dSkamil   extern const uptr sig_ign;
692*ee754c2dSkamil   extern const uptr sig_dfl;
693*ee754c2dSkamil   extern const uptr sig_err;
694*ee754c2dSkamil   extern const uptr sa_siginfo;
695*ee754c2dSkamil 
696*ee754c2dSkamil #if SANITIZER_LINUX
697*ee754c2dSkamil   extern int e_tabsz;
698*ee754c2dSkamil #endif
699*ee754c2dSkamil 
700*ee754c2dSkamil   extern int af_inet;
701*ee754c2dSkamil   extern int af_inet6;
702*ee754c2dSkamil   uptr __sanitizer_in_addr_sz(int af);
703*ee754c2dSkamil 
704*ee754c2dSkamil #if SANITIZER_LINUX
705*ee754c2dSkamil   struct __sanitizer_dl_phdr_info {
706*ee754c2dSkamil     uptr dlpi_addr;
707*ee754c2dSkamil     const char *dlpi_name;
708*ee754c2dSkamil     const void *dlpi_phdr;
709*ee754c2dSkamil     short dlpi_phnum;
710*ee754c2dSkamil   };
711*ee754c2dSkamil 
712*ee754c2dSkamil   extern unsigned struct_ElfW_Phdr_sz;
713*ee754c2dSkamil #endif
714*ee754c2dSkamil 
715*ee754c2dSkamil   struct __sanitizer_addrinfo {
716*ee754c2dSkamil     int ai_flags;
717*ee754c2dSkamil     int ai_family;
718*ee754c2dSkamil     int ai_socktype;
719*ee754c2dSkamil     int ai_protocol;
720*ee754c2dSkamil #if SANITIZER_ANDROID || SANITIZER_MAC
721*ee754c2dSkamil     unsigned ai_addrlen;
722*ee754c2dSkamil     char *ai_canonname;
723*ee754c2dSkamil     void *ai_addr;
724*ee754c2dSkamil #else // LINUX
725*ee754c2dSkamil     unsigned ai_addrlen;
726*ee754c2dSkamil     void *ai_addr;
727*ee754c2dSkamil     char *ai_canonname;
728*ee754c2dSkamil #endif
729*ee754c2dSkamil     struct __sanitizer_addrinfo *ai_next;
730*ee754c2dSkamil   };
731*ee754c2dSkamil 
732*ee754c2dSkamil   struct __sanitizer_hostent {
733*ee754c2dSkamil     char *h_name;
734*ee754c2dSkamil     char **h_aliases;
735*ee754c2dSkamil     int h_addrtype;
736*ee754c2dSkamil     int h_length;
737*ee754c2dSkamil     char **h_addr_list;
738*ee754c2dSkamil   };
739*ee754c2dSkamil 
740*ee754c2dSkamil   struct __sanitizer_pollfd {
741*ee754c2dSkamil     int fd;
742*ee754c2dSkamil     short events;
743*ee754c2dSkamil     short revents;
744*ee754c2dSkamil   };
745*ee754c2dSkamil 
746*ee754c2dSkamil #if SANITIZER_ANDROID || SANITIZER_MAC
747*ee754c2dSkamil   typedef unsigned __sanitizer_nfds_t;
748*ee754c2dSkamil #else
749*ee754c2dSkamil   typedef unsigned long __sanitizer_nfds_t;
750*ee754c2dSkamil #endif
751*ee754c2dSkamil 
752*ee754c2dSkamil #if !SANITIZER_ANDROID
753*ee754c2dSkamil # if SANITIZER_LINUX
754*ee754c2dSkamil   struct __sanitizer_glob_t {
755*ee754c2dSkamil     uptr gl_pathc;
756*ee754c2dSkamil     char **gl_pathv;
757*ee754c2dSkamil     uptr gl_offs;
758*ee754c2dSkamil     int gl_flags;
759*ee754c2dSkamil 
760*ee754c2dSkamil     void (*gl_closedir)(void *dirp);
761*ee754c2dSkamil     void *(*gl_readdir)(void *dirp);
762*ee754c2dSkamil     void *(*gl_opendir)(const char *);
763*ee754c2dSkamil     int (*gl_lstat)(const char *, void *);
764*ee754c2dSkamil     int (*gl_stat)(const char *, void *);
765*ee754c2dSkamil   };
766*ee754c2dSkamil # endif  // SANITIZER_LINUX
767*ee754c2dSkamil 
768*ee754c2dSkamil # if SANITIZER_LINUX
769*ee754c2dSkamil   extern int glob_nomatch;
770*ee754c2dSkamil   extern int glob_altdirfunc;
771*ee754c2dSkamil # endif
772*ee754c2dSkamil #endif  // !SANITIZER_ANDROID
773*ee754c2dSkamil 
774*ee754c2dSkamil   extern unsigned path_max;
775*ee754c2dSkamil 
776*ee754c2dSkamil   struct __sanitizer_wordexp_t {
777*ee754c2dSkamil     uptr we_wordc;
778*ee754c2dSkamil     char **we_wordv;
779*ee754c2dSkamil     uptr we_offs;
780*ee754c2dSkamil   };
781*ee754c2dSkamil 
782*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
783*ee754c2dSkamil   struct __sanitizer_FILE {
784*ee754c2dSkamil     int _flags;
785*ee754c2dSkamil     char *_IO_read_ptr;
786*ee754c2dSkamil     char *_IO_read_end;
787*ee754c2dSkamil     char *_IO_read_base;
788*ee754c2dSkamil     char *_IO_write_base;
789*ee754c2dSkamil     char *_IO_write_ptr;
790*ee754c2dSkamil     char *_IO_write_end;
791*ee754c2dSkamil     char *_IO_buf_base;
792*ee754c2dSkamil     char *_IO_buf_end;
793*ee754c2dSkamil     char *_IO_save_base;
794*ee754c2dSkamil     char *_IO_backup_base;
795*ee754c2dSkamil     char *_IO_save_end;
796*ee754c2dSkamil     void *_markers;
797*ee754c2dSkamil     __sanitizer_FILE *_chain;
798*ee754c2dSkamil     int _fileno;
799*ee754c2dSkamil   };
800*ee754c2dSkamil # define SANITIZER_HAS_STRUCT_FILE 1
801*ee754c2dSkamil #else
802*ee754c2dSkamil   typedef void __sanitizer_FILE;
803*ee754c2dSkamil # define SANITIZER_HAS_STRUCT_FILE 0
804*ee754c2dSkamil #endif
805*ee754c2dSkamil 
806*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID && \
807*ee754c2dSkamil   (defined(__i386) || defined(__x86_64) || defined(__mips64) || \
808*ee754c2dSkamil     defined(__powerpc64__) || defined(__aarch64__) || defined(__arm__) || \
809*ee754c2dSkamil     defined(__s390__))
810*ee754c2dSkamil   extern unsigned struct_user_regs_struct_sz;
811*ee754c2dSkamil   extern unsigned struct_user_fpregs_struct_sz;
812*ee754c2dSkamil   extern unsigned struct_user_fpxregs_struct_sz;
813*ee754c2dSkamil   extern unsigned struct_user_vfpregs_struct_sz;
814*ee754c2dSkamil 
815*ee754c2dSkamil   extern int ptrace_peektext;
816*ee754c2dSkamil   extern int ptrace_peekdata;
817*ee754c2dSkamil   extern int ptrace_peekuser;
818*ee754c2dSkamil   extern int ptrace_getregs;
819*ee754c2dSkamil   extern int ptrace_setregs;
820*ee754c2dSkamil   extern int ptrace_getfpregs;
821*ee754c2dSkamil   extern int ptrace_setfpregs;
822*ee754c2dSkamil   extern int ptrace_getfpxregs;
823*ee754c2dSkamil   extern int ptrace_setfpxregs;
824*ee754c2dSkamil   extern int ptrace_getvfpregs;
825*ee754c2dSkamil   extern int ptrace_setvfpregs;
826*ee754c2dSkamil   extern int ptrace_getsiginfo;
827*ee754c2dSkamil   extern int ptrace_setsiginfo;
828*ee754c2dSkamil   extern int ptrace_getregset;
829*ee754c2dSkamil   extern int ptrace_setregset;
830*ee754c2dSkamil   extern int ptrace_geteventmsg;
831*ee754c2dSkamil #endif
832*ee754c2dSkamil 
833*ee754c2dSkamil #if SANITIZER_LINUX  && !SANITIZER_ANDROID
834*ee754c2dSkamil   extern unsigned struct_shminfo_sz;
835*ee754c2dSkamil   extern unsigned struct_shm_info_sz;
836*ee754c2dSkamil   extern int shmctl_ipc_stat;
837*ee754c2dSkamil   extern int shmctl_ipc_info;
838*ee754c2dSkamil   extern int shmctl_shm_info;
839*ee754c2dSkamil   extern int shmctl_shm_stat;
840*ee754c2dSkamil #endif
841*ee754c2dSkamil 
842*ee754c2dSkamil #if !SANITIZER_MAC && !SANITIZER_FREEBSD
843*ee754c2dSkamil   extern unsigned struct_utmp_sz;
844*ee754c2dSkamil #endif
845*ee754c2dSkamil #if !SANITIZER_ANDROID
846*ee754c2dSkamil   extern unsigned struct_utmpx_sz;
847*ee754c2dSkamil #endif
848*ee754c2dSkamil 
849*ee754c2dSkamil   extern int map_fixed;
850*ee754c2dSkamil 
851*ee754c2dSkamil   // ioctl arguments
852*ee754c2dSkamil   struct __sanitizer_ifconf {
853*ee754c2dSkamil     int ifc_len;
854*ee754c2dSkamil     union {
855*ee754c2dSkamil       void *ifcu_req;
856*ee754c2dSkamil     } ifc_ifcu;
857*ee754c2dSkamil #if SANITIZER_MAC
858*ee754c2dSkamil   } __attribute__((packed));
859*ee754c2dSkamil #else
860*ee754c2dSkamil   };
861*ee754c2dSkamil #endif
862*ee754c2dSkamil 
863*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
864*ee754c2dSkamil struct __sanitizer__obstack_chunk {
865*ee754c2dSkamil   char *limit;
866*ee754c2dSkamil   struct __sanitizer__obstack_chunk *prev;
867*ee754c2dSkamil };
868*ee754c2dSkamil 
869*ee754c2dSkamil struct __sanitizer_obstack {
870*ee754c2dSkamil   long chunk_size;
871*ee754c2dSkamil   struct __sanitizer__obstack_chunk *chunk;
872*ee754c2dSkamil   char *object_base;
873*ee754c2dSkamil   char *next_free;
874*ee754c2dSkamil   uptr more_fields[7];
875*ee754c2dSkamil };
876*ee754c2dSkamil 
877*ee754c2dSkamil typedef uptr (*__sanitizer_cookie_io_read)(void *cookie, char *buf, uptr size);
878*ee754c2dSkamil typedef uptr (*__sanitizer_cookie_io_write)(void *cookie, const char *buf,
879*ee754c2dSkamil                                             uptr size);
880*ee754c2dSkamil typedef int (*__sanitizer_cookie_io_seek)(void *cookie, u64 *offset,
881*ee754c2dSkamil                                           int whence);
882*ee754c2dSkamil typedef int (*__sanitizer_cookie_io_close)(void *cookie);
883*ee754c2dSkamil 
884*ee754c2dSkamil struct __sanitizer_cookie_io_functions_t {
885*ee754c2dSkamil   __sanitizer_cookie_io_read read;
886*ee754c2dSkamil   __sanitizer_cookie_io_write write;
887*ee754c2dSkamil   __sanitizer_cookie_io_seek seek;
888*ee754c2dSkamil   __sanitizer_cookie_io_close close;
889*ee754c2dSkamil };
890*ee754c2dSkamil #endif
891*ee754c2dSkamil 
892*ee754c2dSkamil #define IOC_NRBITS 8
893*ee754c2dSkamil #define IOC_TYPEBITS 8
894*ee754c2dSkamil #if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) || \
895*ee754c2dSkamil     defined(__sparc__)
896*ee754c2dSkamil #define IOC_SIZEBITS 13
897*ee754c2dSkamil #define IOC_DIRBITS 3
898*ee754c2dSkamil #define IOC_NONE 1U
899*ee754c2dSkamil #define IOC_WRITE 4U
900*ee754c2dSkamil #define IOC_READ 2U
901*ee754c2dSkamil #else
902*ee754c2dSkamil #define IOC_SIZEBITS 14
903*ee754c2dSkamil #define IOC_DIRBITS 2
904*ee754c2dSkamil #define IOC_NONE 0U
905*ee754c2dSkamil #define IOC_WRITE 1U
906*ee754c2dSkamil #define IOC_READ 2U
907*ee754c2dSkamil #endif
908*ee754c2dSkamil #define IOC_NRMASK ((1 << IOC_NRBITS) - 1)
909*ee754c2dSkamil #define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1)
910*ee754c2dSkamil #define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1)
911*ee754c2dSkamil #if defined(IOC_DIRMASK)
912*ee754c2dSkamil #undef IOC_DIRMASK
913*ee754c2dSkamil #endif
914*ee754c2dSkamil #define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1)
915*ee754c2dSkamil #define IOC_NRSHIFT 0
916*ee754c2dSkamil #define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS)
917*ee754c2dSkamil #define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS)
918*ee754c2dSkamil #define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS)
919*ee754c2dSkamil #define EVIOC_EV_MAX 0x1f
920*ee754c2dSkamil #define EVIOC_ABS_MAX 0x3f
921*ee754c2dSkamil 
922*ee754c2dSkamil #define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK)
923*ee754c2dSkamil #define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK)
924*ee754c2dSkamil #define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)
925*ee754c2dSkamil 
926*ee754c2dSkamil #if defined(__sparc__)
927*ee754c2dSkamil // In sparc the 14 bits SIZE field overlaps with the
928*ee754c2dSkamil // least significant bit of DIR, so either IOC_READ or
929*ee754c2dSkamil // IOC_WRITE shall be 1 in order to get a non-zero SIZE.
930*ee754c2dSkamil #define IOC_SIZE(nr) \
931*ee754c2dSkamil   ((((((nr) >> 29) & 0x7) & (4U | 2U)) == 0) ? 0 : (((nr) >> 16) & 0x3fff))
932*ee754c2dSkamil #else
933*ee754c2dSkamil #define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)
934*ee754c2dSkamil #endif
935*ee754c2dSkamil 
936*ee754c2dSkamil   extern unsigned struct_ifreq_sz;
937*ee754c2dSkamil   extern unsigned struct_termios_sz;
938*ee754c2dSkamil   extern unsigned struct_winsize_sz;
939*ee754c2dSkamil 
940*ee754c2dSkamil #if SANITIZER_LINUX
941*ee754c2dSkamil   extern unsigned struct_arpreq_sz;
942*ee754c2dSkamil   extern unsigned struct_cdrom_msf_sz;
943*ee754c2dSkamil   extern unsigned struct_cdrom_multisession_sz;
944*ee754c2dSkamil   extern unsigned struct_cdrom_read_audio_sz;
945*ee754c2dSkamil   extern unsigned struct_cdrom_subchnl_sz;
946*ee754c2dSkamil   extern unsigned struct_cdrom_ti_sz;
947*ee754c2dSkamil   extern unsigned struct_cdrom_tocentry_sz;
948*ee754c2dSkamil   extern unsigned struct_cdrom_tochdr_sz;
949*ee754c2dSkamil   extern unsigned struct_cdrom_volctrl_sz;
950*ee754c2dSkamil   extern unsigned struct_ff_effect_sz;
951*ee754c2dSkamil   extern unsigned struct_floppy_drive_params_sz;
952*ee754c2dSkamil   extern unsigned struct_floppy_drive_struct_sz;
953*ee754c2dSkamil   extern unsigned struct_floppy_fdc_state_sz;
954*ee754c2dSkamil   extern unsigned struct_floppy_max_errors_sz;
955*ee754c2dSkamil   extern unsigned struct_floppy_raw_cmd_sz;
956*ee754c2dSkamil   extern unsigned struct_floppy_struct_sz;
957*ee754c2dSkamil   extern unsigned struct_floppy_write_errors_sz;
958*ee754c2dSkamil   extern unsigned struct_format_descr_sz;
959*ee754c2dSkamil   extern unsigned struct_hd_driveid_sz;
960*ee754c2dSkamil   extern unsigned struct_hd_geometry_sz;
961*ee754c2dSkamil   extern unsigned struct_input_absinfo_sz;
962*ee754c2dSkamil   extern unsigned struct_input_id_sz;
963*ee754c2dSkamil   extern unsigned struct_mtpos_sz;
964*ee754c2dSkamil   extern unsigned struct_termio_sz;
965*ee754c2dSkamil   extern unsigned struct_vt_consize_sz;
966*ee754c2dSkamil   extern unsigned struct_vt_sizes_sz;
967*ee754c2dSkamil   extern unsigned struct_vt_stat_sz;
968*ee754c2dSkamil #endif  // SANITIZER_LINUX
969*ee754c2dSkamil 
970*ee754c2dSkamil #if SANITIZER_LINUX
971*ee754c2dSkamil   extern unsigned struct_copr_buffer_sz;
972*ee754c2dSkamil   extern unsigned struct_copr_debug_buf_sz;
973*ee754c2dSkamil   extern unsigned struct_copr_msg_sz;
974*ee754c2dSkamil   extern unsigned struct_midi_info_sz;
975*ee754c2dSkamil   extern unsigned struct_mtget_sz;
976*ee754c2dSkamil   extern unsigned struct_mtop_sz;
977*ee754c2dSkamil   extern unsigned struct_rtentry_sz;
978*ee754c2dSkamil   extern unsigned struct_sbi_instrument_sz;
979*ee754c2dSkamil   extern unsigned struct_seq_event_rec_sz;
980*ee754c2dSkamil   extern unsigned struct_synth_info_sz;
981*ee754c2dSkamil   extern unsigned struct_vt_mode_sz;
982*ee754c2dSkamil #endif // SANITIZER_LINUX
983*ee754c2dSkamil 
984*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
985*ee754c2dSkamil   extern unsigned struct_ax25_parms_struct_sz;
986*ee754c2dSkamil   extern unsigned struct_cyclades_monitor_sz;
987*ee754c2dSkamil   extern unsigned struct_input_keymap_entry_sz;
988*ee754c2dSkamil   extern unsigned struct_ipx_config_data_sz;
989*ee754c2dSkamil   extern unsigned struct_kbdiacrs_sz;
990*ee754c2dSkamil   extern unsigned struct_kbentry_sz;
991*ee754c2dSkamil   extern unsigned struct_kbkeycode_sz;
992*ee754c2dSkamil   extern unsigned struct_kbsentry_sz;
993*ee754c2dSkamil   extern unsigned struct_mtconfiginfo_sz;
994*ee754c2dSkamil   extern unsigned struct_nr_parms_struct_sz;
995*ee754c2dSkamil   extern unsigned struct_scc_modem_sz;
996*ee754c2dSkamil   extern unsigned struct_scc_stat_sz;
997*ee754c2dSkamil   extern unsigned struct_serial_multiport_struct_sz;
998*ee754c2dSkamil   extern unsigned struct_serial_struct_sz;
999*ee754c2dSkamil   extern unsigned struct_sockaddr_ax25_sz;
1000*ee754c2dSkamil   extern unsigned struct_unimapdesc_sz;
1001*ee754c2dSkamil   extern unsigned struct_unimapinit_sz;
1002*ee754c2dSkamil #endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
1003*ee754c2dSkamil 
1004*ee754c2dSkamil   extern const unsigned long __sanitizer_bufsiz;
1005*ee754c2dSkamil 
1006*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
1007*ee754c2dSkamil   extern unsigned struct_audio_buf_info_sz;
1008*ee754c2dSkamil   extern unsigned struct_ppp_stats_sz;
1009*ee754c2dSkamil #endif  // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
1010*ee754c2dSkamil 
1011*ee754c2dSkamil #if !SANITIZER_ANDROID && !SANITIZER_MAC
1012*ee754c2dSkamil   extern unsigned struct_sioc_sg_req_sz;
1013*ee754c2dSkamil   extern unsigned struct_sioc_vif_req_sz;
1014*ee754c2dSkamil #endif
1015*ee754c2dSkamil 
1016*ee754c2dSkamil   // ioctl request identifiers
1017*ee754c2dSkamil 
1018*ee754c2dSkamil   // A special value to mark ioctls that are not present on the target platform,
1019*ee754c2dSkamil   // when it can not be determined without including any system headers.
1020*ee754c2dSkamil   extern const unsigned IOCTL_NOT_PRESENT;
1021*ee754c2dSkamil 
1022*ee754c2dSkamil   extern unsigned IOCTL_FIOASYNC;
1023*ee754c2dSkamil   extern unsigned IOCTL_FIOCLEX;
1024*ee754c2dSkamil   extern unsigned IOCTL_FIOGETOWN;
1025*ee754c2dSkamil   extern unsigned IOCTL_FIONBIO;
1026*ee754c2dSkamil   extern unsigned IOCTL_FIONCLEX;
1027*ee754c2dSkamil   extern unsigned IOCTL_FIOSETOWN;
1028*ee754c2dSkamil   extern unsigned IOCTL_SIOCADDMULTI;
1029*ee754c2dSkamil   extern unsigned IOCTL_SIOCATMARK;
1030*ee754c2dSkamil   extern unsigned IOCTL_SIOCDELMULTI;
1031*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFADDR;
1032*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFBRDADDR;
1033*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFCONF;
1034*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFDSTADDR;
1035*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFFLAGS;
1036*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFMETRIC;
1037*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFMTU;
1038*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFNETMASK;
1039*ee754c2dSkamil   extern unsigned IOCTL_SIOCGPGRP;
1040*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFADDR;
1041*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFBRDADDR;
1042*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFDSTADDR;
1043*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFFLAGS;
1044*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFMETRIC;
1045*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFMTU;
1046*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFNETMASK;
1047*ee754c2dSkamil   extern unsigned IOCTL_SIOCSPGRP;
1048*ee754c2dSkamil   extern unsigned IOCTL_TIOCCONS;
1049*ee754c2dSkamil   extern unsigned IOCTL_TIOCEXCL;
1050*ee754c2dSkamil   extern unsigned IOCTL_TIOCGETD;
1051*ee754c2dSkamil   extern unsigned IOCTL_TIOCGPGRP;
1052*ee754c2dSkamil   extern unsigned IOCTL_TIOCGWINSZ;
1053*ee754c2dSkamil   extern unsigned IOCTL_TIOCMBIC;
1054*ee754c2dSkamil   extern unsigned IOCTL_TIOCMBIS;
1055*ee754c2dSkamil   extern unsigned IOCTL_TIOCMGET;
1056*ee754c2dSkamil   extern unsigned IOCTL_TIOCMSET;
1057*ee754c2dSkamil   extern unsigned IOCTL_TIOCNOTTY;
1058*ee754c2dSkamil   extern unsigned IOCTL_TIOCNXCL;
1059*ee754c2dSkamil   extern unsigned IOCTL_TIOCOUTQ;
1060*ee754c2dSkamil   extern unsigned IOCTL_TIOCPKT;
1061*ee754c2dSkamil   extern unsigned IOCTL_TIOCSCTTY;
1062*ee754c2dSkamil   extern unsigned IOCTL_TIOCSETD;
1063*ee754c2dSkamil   extern unsigned IOCTL_TIOCSPGRP;
1064*ee754c2dSkamil   extern unsigned IOCTL_TIOCSTI;
1065*ee754c2dSkamil   extern unsigned IOCTL_TIOCSWINSZ;
1066*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
1067*ee754c2dSkamil   extern unsigned IOCTL_SIOCGETSGCNT;
1068*ee754c2dSkamil   extern unsigned IOCTL_SIOCGETVIFCNT;
1069*ee754c2dSkamil #endif
1070*ee754c2dSkamil #if SANITIZER_LINUX
1071*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGABS;
1072*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGBIT;
1073*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGEFFECTS;
1074*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGID;
1075*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGKEY;
1076*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGKEYCODE;
1077*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGLED;
1078*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGNAME;
1079*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGPHYS;
1080*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGRAB;
1081*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGREP;
1082*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGSND;
1083*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGSW;
1084*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGUNIQ;
1085*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGVERSION;
1086*ee754c2dSkamil   extern unsigned IOCTL_EVIOCRMFF;
1087*ee754c2dSkamil   extern unsigned IOCTL_EVIOCSABS;
1088*ee754c2dSkamil   extern unsigned IOCTL_EVIOCSFF;
1089*ee754c2dSkamil   extern unsigned IOCTL_EVIOCSKEYCODE;
1090*ee754c2dSkamil   extern unsigned IOCTL_EVIOCSREP;
1091*ee754c2dSkamil   extern unsigned IOCTL_BLKFLSBUF;
1092*ee754c2dSkamil   extern unsigned IOCTL_BLKGETSIZE;
1093*ee754c2dSkamil   extern unsigned IOCTL_BLKRAGET;
1094*ee754c2dSkamil   extern unsigned IOCTL_BLKRASET;
1095*ee754c2dSkamil   extern unsigned IOCTL_BLKROGET;
1096*ee754c2dSkamil   extern unsigned IOCTL_BLKROSET;
1097*ee754c2dSkamil   extern unsigned IOCTL_BLKRRPART;
1098*ee754c2dSkamil   extern unsigned IOCTL_CDROMAUDIOBUFSIZ;
1099*ee754c2dSkamil   extern unsigned IOCTL_CDROMEJECT;
1100*ee754c2dSkamil   extern unsigned IOCTL_CDROMEJECT_SW;
1101*ee754c2dSkamil   extern unsigned IOCTL_CDROMMULTISESSION;
1102*ee754c2dSkamil   extern unsigned IOCTL_CDROMPAUSE;
1103*ee754c2dSkamil   extern unsigned IOCTL_CDROMPLAYMSF;
1104*ee754c2dSkamil   extern unsigned IOCTL_CDROMPLAYTRKIND;
1105*ee754c2dSkamil   extern unsigned IOCTL_CDROMREADAUDIO;
1106*ee754c2dSkamil   extern unsigned IOCTL_CDROMREADCOOKED;
1107*ee754c2dSkamil   extern unsigned IOCTL_CDROMREADMODE1;
1108*ee754c2dSkamil   extern unsigned IOCTL_CDROMREADMODE2;
1109*ee754c2dSkamil   extern unsigned IOCTL_CDROMREADRAW;
1110*ee754c2dSkamil   extern unsigned IOCTL_CDROMREADTOCENTRY;
1111*ee754c2dSkamil   extern unsigned IOCTL_CDROMREADTOCHDR;
1112*ee754c2dSkamil   extern unsigned IOCTL_CDROMRESET;
1113*ee754c2dSkamil   extern unsigned IOCTL_CDROMRESUME;
1114*ee754c2dSkamil   extern unsigned IOCTL_CDROMSEEK;
1115*ee754c2dSkamil   extern unsigned IOCTL_CDROMSTART;
1116*ee754c2dSkamil   extern unsigned IOCTL_CDROMSTOP;
1117*ee754c2dSkamil   extern unsigned IOCTL_CDROMSUBCHNL;
1118*ee754c2dSkamil   extern unsigned IOCTL_CDROMVOLCTRL;
1119*ee754c2dSkamil   extern unsigned IOCTL_CDROMVOLREAD;
1120*ee754c2dSkamil   extern unsigned IOCTL_CDROM_GET_UPC;
1121*ee754c2dSkamil   extern unsigned IOCTL_FDCLRPRM;
1122*ee754c2dSkamil   extern unsigned IOCTL_FDDEFPRM;
1123*ee754c2dSkamil   extern unsigned IOCTL_FDFLUSH;
1124*ee754c2dSkamil   extern unsigned IOCTL_FDFMTBEG;
1125*ee754c2dSkamil   extern unsigned IOCTL_FDFMTEND;
1126*ee754c2dSkamil   extern unsigned IOCTL_FDFMTTRK;
1127*ee754c2dSkamil   extern unsigned IOCTL_FDGETDRVPRM;
1128*ee754c2dSkamil   extern unsigned IOCTL_FDGETDRVSTAT;
1129*ee754c2dSkamil   extern unsigned IOCTL_FDGETDRVTYP;
1130*ee754c2dSkamil   extern unsigned IOCTL_FDGETFDCSTAT;
1131*ee754c2dSkamil   extern unsigned IOCTL_FDGETMAXERRS;
1132*ee754c2dSkamil   extern unsigned IOCTL_FDGETPRM;
1133*ee754c2dSkamil   extern unsigned IOCTL_FDMSGOFF;
1134*ee754c2dSkamil   extern unsigned IOCTL_FDMSGON;
1135*ee754c2dSkamil   extern unsigned IOCTL_FDPOLLDRVSTAT;
1136*ee754c2dSkamil   extern unsigned IOCTL_FDRAWCMD;
1137*ee754c2dSkamil   extern unsigned IOCTL_FDRESET;
1138*ee754c2dSkamil   extern unsigned IOCTL_FDSETDRVPRM;
1139*ee754c2dSkamil   extern unsigned IOCTL_FDSETEMSGTRESH;
1140*ee754c2dSkamil   extern unsigned IOCTL_FDSETMAXERRS;
1141*ee754c2dSkamil   extern unsigned IOCTL_FDSETPRM;
1142*ee754c2dSkamil   extern unsigned IOCTL_FDTWADDLE;
1143*ee754c2dSkamil   extern unsigned IOCTL_FDWERRORCLR;
1144*ee754c2dSkamil   extern unsigned IOCTL_FDWERRORGET;
1145*ee754c2dSkamil   extern unsigned IOCTL_HDIO_DRIVE_CMD;
1146*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GETGEO;
1147*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GET_32BIT;
1148*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GET_DMA;
1149*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GET_IDENTITY;
1150*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS;
1151*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GET_MULTCOUNT;
1152*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GET_NOWERR;
1153*ee754c2dSkamil   extern unsigned IOCTL_HDIO_GET_UNMASKINTR;
1154*ee754c2dSkamil   extern unsigned IOCTL_HDIO_SET_32BIT;
1155*ee754c2dSkamil   extern unsigned IOCTL_HDIO_SET_DMA;
1156*ee754c2dSkamil   extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS;
1157*ee754c2dSkamil   extern unsigned IOCTL_HDIO_SET_MULTCOUNT;
1158*ee754c2dSkamil   extern unsigned IOCTL_HDIO_SET_NOWERR;
1159*ee754c2dSkamil   extern unsigned IOCTL_HDIO_SET_UNMASKINTR;
1160*ee754c2dSkamil   extern unsigned IOCTL_MTIOCPOS;
1161*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCGASYNCMAP;
1162*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCGDEBUG;
1163*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCGFLAGS;
1164*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCGUNIT;
1165*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCGXASYNCMAP;
1166*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCSASYNCMAP;
1167*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCSDEBUG;
1168*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCSFLAGS;
1169*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCSMAXCID;
1170*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCSMRU;
1171*ee754c2dSkamil   extern unsigned IOCTL_PPPIOCSXASYNCMAP;
1172*ee754c2dSkamil   extern unsigned IOCTL_SIOCDARP;
1173*ee754c2dSkamil   extern unsigned IOCTL_SIOCDRARP;
1174*ee754c2dSkamil   extern unsigned IOCTL_SIOCGARP;
1175*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFENCAP;
1176*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFHWADDR;
1177*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFMAP;
1178*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFMEM;
1179*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFNAME;
1180*ee754c2dSkamil   extern unsigned IOCTL_SIOCGIFSLAVE;
1181*ee754c2dSkamil   extern unsigned IOCTL_SIOCGRARP;
1182*ee754c2dSkamil   extern unsigned IOCTL_SIOCGSTAMP;
1183*ee754c2dSkamil   extern unsigned IOCTL_SIOCSARP;
1184*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFENCAP;
1185*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFHWADDR;
1186*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFLINK;
1187*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFMAP;
1188*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFMEM;
1189*ee754c2dSkamil   extern unsigned IOCTL_SIOCSIFSLAVE;
1190*ee754c2dSkamil   extern unsigned IOCTL_SIOCSRARP;
1191*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_HALT;
1192*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_LOAD;
1193*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_RCODE;
1194*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_RCVMSG;
1195*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_RDATA;
1196*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_RESET;
1197*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_RUN;
1198*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;
1199*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_WCODE;
1200*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_COPR_WDATA;
1201*ee754c2dSkamil   extern unsigned IOCTL_TCFLSH;
1202*ee754c2dSkamil   extern unsigned IOCTL_TCGETA;
1203*ee754c2dSkamil   extern unsigned IOCTL_TCGETS;
1204*ee754c2dSkamil   extern unsigned IOCTL_TCSBRK;
1205*ee754c2dSkamil   extern unsigned IOCTL_TCSBRKP;
1206*ee754c2dSkamil   extern unsigned IOCTL_TCSETA;
1207*ee754c2dSkamil   extern unsigned IOCTL_TCSETAF;
1208*ee754c2dSkamil   extern unsigned IOCTL_TCSETAW;
1209*ee754c2dSkamil   extern unsigned IOCTL_TCSETS;
1210*ee754c2dSkamil   extern unsigned IOCTL_TCSETSF;
1211*ee754c2dSkamil   extern unsigned IOCTL_TCSETSW;
1212*ee754c2dSkamil   extern unsigned IOCTL_TCXONC;
1213*ee754c2dSkamil   extern unsigned IOCTL_TIOCGLCKTRMIOS;
1214*ee754c2dSkamil   extern unsigned IOCTL_TIOCGSOFTCAR;
1215*ee754c2dSkamil   extern unsigned IOCTL_TIOCINQ;
1216*ee754c2dSkamil   extern unsigned IOCTL_TIOCLINUX;
1217*ee754c2dSkamil   extern unsigned IOCTL_TIOCSERCONFIG;
1218*ee754c2dSkamil   extern unsigned IOCTL_TIOCSERGETLSR;
1219*ee754c2dSkamil   extern unsigned IOCTL_TIOCSERGWILD;
1220*ee754c2dSkamil   extern unsigned IOCTL_TIOCSERSWILD;
1221*ee754c2dSkamil   extern unsigned IOCTL_TIOCSLCKTRMIOS;
1222*ee754c2dSkamil   extern unsigned IOCTL_TIOCSSOFTCAR;
1223*ee754c2dSkamil   extern unsigned IOCTL_VT_DISALLOCATE;
1224*ee754c2dSkamil   extern unsigned IOCTL_VT_GETSTATE;
1225*ee754c2dSkamil   extern unsigned IOCTL_VT_RESIZE;
1226*ee754c2dSkamil   extern unsigned IOCTL_VT_RESIZEX;
1227*ee754c2dSkamil   extern unsigned IOCTL_VT_SENDSIG;
1228*ee754c2dSkamil   extern unsigned IOCTL_MTIOCGET;
1229*ee754c2dSkamil   extern unsigned IOCTL_MTIOCTOP;
1230*ee754c2dSkamil   extern unsigned IOCTL_SIOCADDRT;
1231*ee754c2dSkamil   extern unsigned IOCTL_SIOCDELRT;
1232*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE;
1233*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_GETFMTS;
1234*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK;
1235*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_POST;
1236*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_RESET;
1237*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_SETFMT;
1238*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT;
1239*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_SPEED;
1240*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_STEREO;
1241*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE;
1242*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_SYNC;
1243*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE;
1244*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR;
1245*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_MIDI_INFO;
1246*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_MIDI_PRETIME;
1247*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE;
1248*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT;
1249*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT;
1250*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS;
1251*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS;
1252*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND;
1253*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_PANIC;
1254*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE;
1255*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_RESET;
1256*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES;
1257*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_SYNC;
1258*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI;
1259*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD;
1260*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SYNTH_INFO;
1261*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL;
1262*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_CONTINUE;
1263*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_METRONOME;
1264*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_SELECT;
1265*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_SOURCE;
1266*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_START;
1267*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_STOP;
1268*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_TEMPO;
1269*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE;
1270*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM;
1271*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_BASS;
1272*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_CAPS;
1273*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_CD;
1274*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK;
1275*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE;
1276*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN;
1277*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_IMIX;
1278*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_LINE1;
1279*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_LINE2;
1280*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_LINE3;
1281*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_LINE;
1282*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_LOUD;
1283*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_MIC;
1284*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_MUTE;
1285*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN;
1286*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_PCM;
1287*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV;
1288*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK;
1289*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC;
1290*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER;
1291*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS;
1292*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH;
1293*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE;
1294*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME;
1295*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM;
1296*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS;
1297*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_CD;
1298*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE;
1299*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN;
1300*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX;
1301*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1;
1302*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2;
1303*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3;
1304*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE;
1305*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD;
1306*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC;
1307*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE;
1308*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN;
1309*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM;
1310*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV;
1311*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC;
1312*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER;
1313*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH;
1314*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE;
1315*ee754c2dSkamil   extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME;
1316*ee754c2dSkamil   extern unsigned IOCTL_SOUND_PCM_READ_BITS;
1317*ee754c2dSkamil   extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS;
1318*ee754c2dSkamil   extern unsigned IOCTL_SOUND_PCM_READ_FILTER;
1319*ee754c2dSkamil   extern unsigned IOCTL_SOUND_PCM_READ_RATE;
1320*ee754c2dSkamil   extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS;
1321*ee754c2dSkamil   extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER;
1322*ee754c2dSkamil   extern unsigned IOCTL_VT_ACTIVATE;
1323*ee754c2dSkamil   extern unsigned IOCTL_VT_GETMODE;
1324*ee754c2dSkamil   extern unsigned IOCTL_VT_OPENQRY;
1325*ee754c2dSkamil   extern unsigned IOCTL_VT_RELDISP;
1326*ee754c2dSkamil   extern unsigned IOCTL_VT_SETMODE;
1327*ee754c2dSkamil   extern unsigned IOCTL_VT_WAITACTIVE;
1328*ee754c2dSkamil #endif  // SANITIZER_LINUX
1329*ee754c2dSkamil 
1330*ee754c2dSkamil #if SANITIZER_LINUX && !SANITIZER_ANDROID
1331*ee754c2dSkamil   extern unsigned IOCTL_CYGETDEFTHRESH;
1332*ee754c2dSkamil   extern unsigned IOCTL_CYGETDEFTIMEOUT;
1333*ee754c2dSkamil   extern unsigned IOCTL_CYGETMON;
1334*ee754c2dSkamil   extern unsigned IOCTL_CYGETTHRESH;
1335*ee754c2dSkamil   extern unsigned IOCTL_CYGETTIMEOUT;
1336*ee754c2dSkamil   extern unsigned IOCTL_CYSETDEFTHRESH;
1337*ee754c2dSkamil   extern unsigned IOCTL_CYSETDEFTIMEOUT;
1338*ee754c2dSkamil   extern unsigned IOCTL_CYSETTHRESH;
1339*ee754c2dSkamil   extern unsigned IOCTL_CYSETTIMEOUT;
1340*ee754c2dSkamil   extern unsigned IOCTL_EQL_EMANCIPATE;
1341*ee754c2dSkamil   extern unsigned IOCTL_EQL_ENSLAVE;
1342*ee754c2dSkamil   extern unsigned IOCTL_EQL_GETMASTRCFG;
1343*ee754c2dSkamil   extern unsigned IOCTL_EQL_GETSLAVECFG;
1344*ee754c2dSkamil   extern unsigned IOCTL_EQL_SETMASTRCFG;
1345*ee754c2dSkamil   extern unsigned IOCTL_EQL_SETSLAVECFG;
1346*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGKEYCODE_V2;
1347*ee754c2dSkamil   extern unsigned IOCTL_EVIOCGPROP;
1348*ee754c2dSkamil   extern unsigned IOCTL_EVIOCSKEYCODE_V2;
1349*ee754c2dSkamil   extern unsigned IOCTL_FS_IOC_GETFLAGS;
1350*ee754c2dSkamil   extern unsigned IOCTL_FS_IOC_GETVERSION;
1351*ee754c2dSkamil   extern unsigned IOCTL_FS_IOC_SETFLAGS;
1352*ee754c2dSkamil   extern unsigned IOCTL_FS_IOC_SETVERSION;
1353*ee754c2dSkamil   extern unsigned IOCTL_GIO_CMAP;
1354*ee754c2dSkamil   extern unsigned IOCTL_GIO_FONT;
1355*ee754c2dSkamil   extern unsigned IOCTL_GIO_UNIMAP;
1356*ee754c2dSkamil   extern unsigned IOCTL_GIO_UNISCRNMAP;
1357*ee754c2dSkamil   extern unsigned IOCTL_KDADDIO;
1358*ee754c2dSkamil   extern unsigned IOCTL_KDDELIO;
1359*ee754c2dSkamil   extern unsigned IOCTL_KDGETKEYCODE;
1360*ee754c2dSkamil   extern unsigned IOCTL_KDGKBDIACR;
1361*ee754c2dSkamil   extern unsigned IOCTL_KDGKBENT;
1362*ee754c2dSkamil   extern unsigned IOCTL_KDGKBLED;
1363*ee754c2dSkamil   extern unsigned IOCTL_KDGKBMETA;
1364*ee754c2dSkamil   extern unsigned IOCTL_KDGKBSENT;
1365*ee754c2dSkamil   extern unsigned IOCTL_KDMAPDISP;
1366*ee754c2dSkamil   extern unsigned IOCTL_KDSETKEYCODE;
1367*ee754c2dSkamil   extern unsigned IOCTL_KDSIGACCEPT;
1368*ee754c2dSkamil   extern unsigned IOCTL_KDSKBDIACR;
1369*ee754c2dSkamil   extern unsigned IOCTL_KDSKBENT;
1370*ee754c2dSkamil   extern unsigned IOCTL_KDSKBLED;
1371*ee754c2dSkamil   extern unsigned IOCTL_KDSKBMETA;
1372*ee754c2dSkamil   extern unsigned IOCTL_KDSKBSENT;
1373*ee754c2dSkamil   extern unsigned IOCTL_KDUNMAPDISP;
1374*ee754c2dSkamil   extern unsigned IOCTL_LPABORT;
1375*ee754c2dSkamil   extern unsigned IOCTL_LPABORTOPEN;
1376*ee754c2dSkamil   extern unsigned IOCTL_LPCAREFUL;
1377*ee754c2dSkamil   extern unsigned IOCTL_LPCHAR;
1378*ee754c2dSkamil   extern unsigned IOCTL_LPGETIRQ;
1379*ee754c2dSkamil   extern unsigned IOCTL_LPGETSTATUS;
1380*ee754c2dSkamil   extern unsigned IOCTL_LPRESET;
1381*ee754c2dSkamil   extern unsigned IOCTL_LPSETIRQ;
1382*ee754c2dSkamil   extern unsigned IOCTL_LPTIME;
1383*ee754c2dSkamil   extern unsigned IOCTL_LPWAIT;
1384*ee754c2dSkamil   extern unsigned IOCTL_MTIOCGETCONFIG;
1385*ee754c2dSkamil   extern unsigned IOCTL_MTIOCSETCONFIG;
1386*ee754c2dSkamil   extern unsigned IOCTL_PIO_CMAP;
1387*ee754c2dSkamil   extern unsigned IOCTL_PIO_FONT;
1388*ee754c2dSkamil   extern unsigned IOCTL_PIO_UNIMAP;
1389*ee754c2dSkamil   extern unsigned IOCTL_PIO_UNIMAPCLR;
1390*ee754c2dSkamil   extern unsigned IOCTL_PIO_UNISCRNMAP;
1391*ee754c2dSkamil   extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN;
1392*ee754c2dSkamil   extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST;
1393*ee754c2dSkamil   extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE;
1394*ee754c2dSkamil   extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE;
1395*ee754c2dSkamil   extern unsigned IOCTL_SIOCAIPXITFCRT;
1396*ee754c2dSkamil   extern unsigned IOCTL_SIOCAIPXPRISLT;
1397*ee754c2dSkamil   extern unsigned IOCTL_SIOCAX25ADDUID;
1398*ee754c2dSkamil   extern unsigned IOCTL_SIOCAX25DELUID;
1399*ee754c2dSkamil   extern unsigned IOCTL_SIOCAX25GETPARMS;
1400*ee754c2dSkamil   extern unsigned IOCTL_SIOCAX25GETUID;
1401*ee754c2dSkamil   extern unsigned IOCTL_SIOCAX25NOUID;
1402*ee754c2dSkamil   extern unsigned IOCTL_SIOCAX25SETPARMS;
1403*ee754c2dSkamil   extern unsigned IOCTL_SIOCDEVPLIP;
1404*ee754c2dSkamil   extern unsigned IOCTL_SIOCIPXCFGDATA;
1405*ee754c2dSkamil   extern unsigned IOCTL_SIOCNRDECOBS;
1406*ee754c2dSkamil   extern unsigned IOCTL_SIOCNRGETPARMS;
1407*ee754c2dSkamil   extern unsigned IOCTL_SIOCNRRTCTL;
1408*ee754c2dSkamil   extern unsigned IOCTL_SIOCNRSETPARMS;
1409*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_GETISPACE;
1410*ee754c2dSkamil   extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE;
1411*ee754c2dSkamil   extern unsigned IOCTL_TIOCGSERIAL;
1412*ee754c2dSkamil   extern unsigned IOCTL_TIOCSERGETMULTI;
1413*ee754c2dSkamil   extern unsigned IOCTL_TIOCSERSETMULTI;
1414*ee754c2dSkamil   extern unsigned IOCTL_TIOCSSERIAL;
1415*ee754c2dSkamil   extern unsigned IOCTL_GIO_SCRNMAP;
1416*ee754c2dSkamil   extern unsigned IOCTL_KDDISABIO;
1417*ee754c2dSkamil   extern unsigned IOCTL_KDENABIO;
1418*ee754c2dSkamil   extern unsigned IOCTL_KDGETLED;
1419*ee754c2dSkamil   extern unsigned IOCTL_KDGETMODE;
1420*ee754c2dSkamil   extern unsigned IOCTL_KDGKBMODE;
1421*ee754c2dSkamil   extern unsigned IOCTL_KDGKBTYPE;
1422*ee754c2dSkamil   extern unsigned IOCTL_KDMKTONE;
1423*ee754c2dSkamil   extern unsigned IOCTL_KDSETLED;
1424*ee754c2dSkamil   extern unsigned IOCTL_KDSETMODE;
1425*ee754c2dSkamil   extern unsigned IOCTL_KDSKBMODE;
1426*ee754c2dSkamil   extern unsigned IOCTL_KIOCSOUND;
1427*ee754c2dSkamil   extern unsigned IOCTL_PIO_SCRNMAP;
1428*ee754c2dSkamil #endif
1429*ee754c2dSkamil 
1430*ee754c2dSkamil   extern const int si_SEGV_MAPERR;
1431*ee754c2dSkamil   extern const int si_SEGV_ACCERR;
1432*ee754c2dSkamil }  // namespace __sanitizer
1433*ee754c2dSkamil 
1434*ee754c2dSkamil #define CHECK_TYPE_SIZE(TYPE) \
1435*ee754c2dSkamil   COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))
1436*ee754c2dSkamil 
1437*ee754c2dSkamil #define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
1438*ee754c2dSkamil   COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *) NULL)->MEMBER) == \
1439*ee754c2dSkamil                  sizeof(((CLASS *) NULL)->MEMBER));                \
1440*ee754c2dSkamil   COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) ==          \
1441*ee754c2dSkamil                  offsetof(CLASS, MEMBER))
1442*ee754c2dSkamil 
1443*ee754c2dSkamil // For sigaction, which is a function and struct at the same time,
1444*ee754c2dSkamil // and thus requires explicit "struct" in sizeof() expression.
1445*ee754c2dSkamil #define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER)                       \
1446*ee754c2dSkamil   COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *) NULL)->MEMBER) == \
1447*ee754c2dSkamil                  sizeof(((struct CLASS *) NULL)->MEMBER));                \
1448*ee754c2dSkamil   COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) ==          \
1449*ee754c2dSkamil                  offsetof(struct CLASS, MEMBER))
1450*ee754c2dSkamil 
1451*ee754c2dSkamil #define SIGACTION_SYMNAME sigaction
1452*ee754c2dSkamil 
1453*ee754c2dSkamil #endif  // SANITIZER_LINUX || SANITIZER_MAC
1454*ee754c2dSkamil 
1455*ee754c2dSkamil #endif
1456