blob: 77bbdb1041bf44f70a361ad957b97dab13c4d31d [file] [log] [blame]
Evgeniy Stepanov9358c582013-02-19 09:19:16 +00001//===-- sanitizer_platform_limits_posix.h ---------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file is a part of Sanitizer common code.
11//
12// Sizes and layouts of platform-specific POSIX data structures.
13//===----------------------------------------------------------------------===//
14
15#ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H
16#define SANITIZER_PLATFORM_LIMITS_POSIX_H
17
Sergey Matveev70db33e2013-10-11 14:19:14 +000018#include "sanitizer_internal_defs.h"
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000019#include "sanitizer_platform.h"
20
Stephen Hines86277eb2015-03-23 12:06:32 -070021#if SANITIZER_FREEBSD
22// FreeBSD's dlopen() returns a pointer to an Obj_Entry structure that
23// incroporates the map structure.
24# define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \
25 ((link_map*)((handle) == nullptr ? nullptr : ((char*)(handle) + 544)))
26#else
27# define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle))
28#endif // !SANITIZER_FREEBSD
29
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000030namespace __sanitizer {
31 extern unsigned struct_utsname_sz;
32 extern unsigned struct_stat_sz;
Stephen Hines2d1fdb22014-05-28 23:58:16 -070033#if !SANITIZER_FREEBSD && !SANITIZER_IOS
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000034 extern unsigned struct_stat64_sz;
Alexander Potapenkob8a141f2013-10-31 17:38:18 +000035#endif
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000036 extern unsigned struct_rusage_sz;
Evgeniy Stepanov897a4ae2013-04-09 14:34:59 +000037 extern unsigned siginfo_t_sz;
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000038 extern unsigned struct_itimerval_sz;
39 extern unsigned pthread_t_sz;
Alexey Samsonov5e2d3772013-10-16 08:20:31 +000040 extern unsigned pthread_cond_t_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +000041 extern unsigned pid_t_sz;
42 extern unsigned timeval_sz;
43 extern unsigned uid_t_sz;
Stephen Hines2d1fdb22014-05-28 23:58:16 -070044 extern unsigned gid_t_sz;
Evgeniy Stepanov57a10952013-07-10 14:17:46 +000045 extern unsigned mbstate_t_sz;
Evgeniy Stepanov639df402013-09-06 14:20:01 +000046 extern unsigned struct_timezone_sz;
47 extern unsigned struct_tms_sz;
48 extern unsigned struct_itimerspec_sz;
49 extern unsigned struct_sigevent_sz;
50 extern unsigned struct_sched_param_sz;
Evgeniy Stepanov1bb22292013-10-30 00:58:17 +000051 extern unsigned struct_statfs64_sz;
Evgeniy Stepanov4fb04a82013-04-04 09:21:48 +000052
53#if !SANITIZER_ANDROID
Stephen Hines6a211c52014-07-21 00:49:56 -070054 extern unsigned struct_statfs_sz;
55 extern unsigned struct_sockaddr_sz;
Evgeniy Stepanov07277022013-04-04 09:03:56 +000056 extern unsigned ucontext_t_sz;
Evgeniy Stepanov4fb04a82013-04-04 09:21:48 +000057#endif // !SANITIZER_ANDROID
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000058
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000059#if SANITIZER_LINUX
Evgeniy Stepanove1e68832013-11-22 14:00:02 +000060
61#if defined(__x86_64__)
Evgeniy Stepanove1e68832013-11-22 14:00:02 +000062 const unsigned struct_kernel_stat_sz = 144;
63 const unsigned struct_kernel_stat64_sz = 0;
64#elif defined(__i386__)
Evgeniy Stepanove1e68832013-11-22 14:00:02 +000065 const unsigned struct_kernel_stat_sz = 64;
66 const unsigned struct_kernel_stat64_sz = 96;
Evgeniy Stepanovf17dd742013-11-22 14:01:03 +000067#elif defined(__arm__)
Evgeniy Stepanovf17dd742013-11-22 14:01:03 +000068 const unsigned struct_kernel_stat_sz = 64;
69 const unsigned struct_kernel_stat64_sz = 104;
Stephen Hines2d1fdb22014-05-28 23:58:16 -070070#elif defined(__aarch64__)
71 const unsigned struct_kernel_stat_sz = 128;
72 const unsigned struct_kernel_stat64_sz = 104;
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +000073#elif defined(__powerpc__) && !defined(__powerpc64__)
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +000074 const unsigned struct_kernel_stat_sz = 72;
75 const unsigned struct_kernel_stat64_sz = 104;
76#elif defined(__powerpc64__)
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +000077 const unsigned struct_kernel_stat_sz = 144;
78 const unsigned struct_kernel_stat64_sz = 104;
Stephen Hines6a211c52014-07-21 00:49:56 -070079#elif defined(__mips__)
80 #if SANITIZER_WORDSIZE == 64
81 const unsigned struct_kernel_stat_sz = 216;
82 #else
83 const unsigned struct_kernel_stat_sz = 144;
84 #endif
85 const unsigned struct_kernel_stat64_sz = 104;
Evgeniy Stepanove1e68832013-11-22 14:00:02 +000086#endif
Evgeniy Stepanovd7041c62013-11-22 14:00:45 +000087 struct __sanitizer_perf_event_attr {
88 unsigned type;
89 unsigned size;
90 // More fields that vary with the kernel version.
91 };
Evgeniy Stepanove1e68832013-11-22 14:00:02 +000092
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000093 extern unsigned struct_epoll_event_sz;
Evgeniy Stepanov359d7fc2013-06-24 14:25:33 +000094 extern unsigned struct_sysinfo_sz;
Evgeniy Stepanov639df402013-09-06 14:20:01 +000095 extern unsigned __user_cap_header_struct_sz;
96 extern unsigned __user_cap_data_struct_sz;
Evgeniy Stepanov25ecb752014-02-10 08:00:24 +000097 extern unsigned struct_new_utsname_sz;
98 extern unsigned struct_old_utsname_sz;
99 extern unsigned struct_oldold_utsname_sz;
100
Evgeniy Stepanov639df402013-09-06 14:20:01 +0000101 const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long);
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700102#endif // SANITIZER_LINUX
103
104#if SANITIZER_LINUX || SANITIZER_FREEBSD
105
106#if defined(__powerpc64__)
107 const unsigned struct___old_kernel_stat_sz = 0;
108#else
109 const unsigned struct___old_kernel_stat_sz = 32;
110#endif
111
112 extern unsigned struct_rlimit_sz;
113 extern unsigned struct_utimbuf_sz;
114 extern unsigned struct_timespec_sz;
Evgeniy Stepanov639df402013-09-06 14:20:01 +0000115
Evgeniy Stepanovbd659562013-11-01 01:20:39 +0000116 struct __sanitizer_iocb {
117 u64 aio_data;
118 u32 aio_key_or_aio_reserved1; // Simply crazy.
119 u32 aio_reserved1_or_aio_key; // Luckily, we don't need these.
120 u16 aio_lio_opcode;
121 s16 aio_reqprio;
122 u32 aio_fildes;
123 u64 aio_buf;
124 u64 aio_nbytes;
125 s64 aio_offset;
126 u64 aio_reserved2;
Evgeniy Stepanovc50f7962013-11-01 17:48:35 +0000127 u64 aio_reserved3;
Evgeniy Stepanovbd659562013-11-01 01:20:39 +0000128 };
129
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700130 struct __sanitizer_io_event {
131 u64 data;
132 u64 obj;
133 u64 res;
134 u64 res2;
135 };
136
Evgeniy Stepanove1e68832013-11-22 14:00:02 +0000137 const unsigned iocb_cmd_pread = 0;
138 const unsigned iocb_cmd_pwrite = 1;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700139 const unsigned iocb_cmd_preadv = 7;
140 const unsigned iocb_cmd_pwritev = 8;
Evgeniy Stepanovbd659562013-11-01 01:20:39 +0000141
Evgeniy Stepanov639df402013-09-06 14:20:01 +0000142 struct __sanitizer___sysctl_args {
143 int *name;
144 int nlen;
145 void *oldval;
146 uptr *oldlenp;
147 void *newval;
148 uptr newlen;
Evgeniy Stepanov9a4a1592013-09-06 14:58:49 +0000149 unsigned long ___unused[4];
Evgeniy Stepanov639df402013-09-06 14:20:01 +0000150 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700151
152 const unsigned old_sigset_t_sz = sizeof(unsigned long);
153#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
154
155#if SANITIZER_ANDROID
156 struct __sanitizer_mallinfo {
157 uptr v[10];
158 };
159#endif
Evgeniy Stepanov9358c582013-02-19 09:19:16 +0000160
Evgeniy Stepanov24e13722013-03-19 14:33:38 +0000161#if SANITIZER_LINUX && !SANITIZER_ANDROID
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700162 struct __sanitizer_mallinfo {
163 int v[10];
164 };
165
Evgeniy Stepanov25ecb752014-02-10 08:00:24 +0000166 extern unsigned struct_ustat_sz;
Evgeniy Stepanovb711ca62013-02-19 11:06:41 +0000167 extern unsigned struct_rlimit64_sz;
Evgeniy Stepanov0489e112013-10-18 11:26:02 +0000168 extern unsigned struct_statvfs64_sz;
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000169
170 struct __sanitizer_ipc_perm {
171 int __key;
172 int uid;
173 int gid;
174 int cuid;
175 int cgid;
Bill Wendling7f790ca2013-12-16 02:36:46 +0000176#ifdef __powerpc__
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000177 unsigned mode;
178 unsigned __seq;
Bill Wendling7f790ca2013-12-16 02:36:46 +0000179 u64 __unused1;
180 u64 __unused2;
Stephen Hines86277eb2015-03-23 12:06:32 -0700181#elif defined(__mips__) || defined(__aarch64__)
Stephen Hines6a211c52014-07-21 00:49:56 -0700182 unsigned int mode;
183 unsigned short __seq;
184 unsigned short __pad1;
185 unsigned long __unused1;
186 unsigned long __unused2;
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000187#else
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000188 unsigned short mode;
189 unsigned short __pad1;
190 unsigned short __seq;
191 unsigned short __pad2;
Bill Wendling7f790ca2013-12-16 02:36:46 +0000192#if defined(__x86_64__) && !defined(_LP64)
193 u64 __unused1;
194 u64 __unused2;
195#else
196 unsigned long __unused1;
197 unsigned long __unused2;
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000198#endif
Bill Wendling7f790ca2013-12-16 02:36:46 +0000199#endif
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000200 };
201
202 struct __sanitizer_shmid_ds {
203 __sanitizer_ipc_perm shm_perm;
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000204 #ifndef __powerpc__
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000205 uptr shm_segsz;
Bill Wendling7f790ca2013-12-16 02:36:46 +0000206 #elif !defined(__powerpc64__)
207 uptr __unused0;
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000208 #endif
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700209 #if defined(__x86_64__) && !defined(_LP64)
210 u64 shm_atime;
211 u64 shm_dtime;
212 u64 shm_ctime;
213 #else
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000214 uptr shm_atime;
Stephen Hines6a211c52014-07-21 00:49:56 -0700215 #if !defined(_LP64) && !defined(__mips__)
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000216 uptr __unused1;
217 #endif
218 uptr shm_dtime;
Stephen Hines6a211c52014-07-21 00:49:56 -0700219 #if !defined(_LP64) && !defined(__mips__)
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000220 uptr __unused2;
221 #endif
222 uptr shm_ctime;
Stephen Hines6a211c52014-07-21 00:49:56 -0700223 #if !defined(_LP64) && !defined(__mips__)
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000224 uptr __unused3;
225 #endif
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700226 #endif
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000227 #ifdef __powerpc__
228 uptr shm_segsz;
229 #endif
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000230 int shm_cpid;
231 int shm_lpid;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700232 #if defined(__x86_64__) && !defined(_LP64)
233 u64 shm_nattch;
234 u64 __unused4;
235 u64 __unused5;
236 #else
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000237 uptr shm_nattch;
238 uptr __unused4;
239 uptr __unused5;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700240 #endif
Evgeniy Stepanovf3603892013-10-29 02:48:49 +0000241 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700242#elif SANITIZER_FREEBSD
243 struct __sanitizer_ipc_perm {
244 unsigned int cuid;
245 unsigned int cgid;
246 unsigned int uid;
247 unsigned int gid;
248 unsigned short mode;
249 unsigned short seq;
250 long key;
251 };
252
253 struct __sanitizer_shmid_ds {
254 __sanitizer_ipc_perm shm_perm;
255 unsigned long shm_segsz;
256 unsigned int shm_lpid;
257 unsigned int shm_cpid;
258 int shm_nattch;
259 unsigned long shm_atime;
260 unsigned long shm_dtime;
261 unsigned long shm_ctime;
262 };
263#endif
264
265#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
266 extern unsigned struct_msqid_ds_sz;
267 extern unsigned struct_mq_attr_sz;
268 extern unsigned struct_timex_sz;
269 extern unsigned struct_statvfs_sz;
270#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
Evgeniy Stepanovb711ca62013-02-19 11:06:41 +0000271
Evgeniy Stepanov9666d892013-05-29 11:30:00 +0000272 struct __sanitizer_iovec {
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700273 void *iov_base;
Evgeniy Stepanov9666d892013-05-29 11:30:00 +0000274 uptr iov_len;
275 };
276
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700277#if !SANITIZER_ANDROID
278 struct __sanitizer_ifaddrs {
279 struct __sanitizer_ifaddrs *ifa_next;
280 char *ifa_name;
281 unsigned int ifa_flags;
282 void *ifa_addr; // (struct sockaddr *)
283 void *ifa_netmask; // (struct sockaddr *)
284 // This is a union on Linux.
285# ifdef ifa_dstaddr
286# undef ifa_dstaddr
287# endif
288 void *ifa_dstaddr; // (struct sockaddr *)
289 void *ifa_data;
290 };
291#endif // !SANITIZER_ANDROID
292
Evgeniy Stepanov8be684c2013-07-05 15:04:56 +0000293#if SANITIZER_MAC
294 typedef unsigned long __sanitizer_pthread_key_t;
295#else
Evgeniy Stepanov737da2f2013-07-05 12:31:07 +0000296 typedef unsigned __sanitizer_pthread_key_t;
Evgeniy Stepanov8be684c2013-07-05 15:04:56 +0000297#endif
Evgeniy Stepanov737da2f2013-07-05 12:31:07 +0000298
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700299#if SANITIZER_LINUX && !SANITIZER_ANDROID
300
301 struct __sanitizer_XDR {
302 int x_op;
303 void *x_ops;
304 uptr x_public;
305 uptr x_private;
306 uptr x_base;
307 unsigned x_handy;
308 };
309
310 const int __sanitizer_XDR_ENCODE = 0;
311 const int __sanitizer_XDR_DECODE = 1;
312 const int __sanitizer_XDR_FREE = 2;
313#endif
314
315 struct __sanitizer_passwd {
316 char *pw_name;
317 char *pw_passwd;
318 int pw_uid;
319 int pw_gid;
320#if SANITIZER_MAC || SANITIZER_FREEBSD
321 long pw_change;
322 char *pw_class;
323#endif
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700324#if !(SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32))
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700325 char *pw_gecos;
326#endif
327 char *pw_dir;
328 char *pw_shell;
329#if SANITIZER_MAC || SANITIZER_FREEBSD
330 long pw_expire;
331#endif
332#if SANITIZER_FREEBSD
333 int pw_fields;
334#endif
335 };
336
337 struct __sanitizer_group {
338 char *gr_name;
339 char *gr_passwd;
340 int gr_gid;
341 char **gr_mem;
342 };
343
344#if defined(__x86_64__) && !defined(_LP64)
345 typedef long long __sanitizer_time_t;
346#else
347 typedef long __sanitizer_time_t;
348#endif
349
350 struct __sanitizer_timeb {
351 __sanitizer_time_t time;
352 unsigned short millitm;
353 short timezone;
354 short dstflag;
355 };
356
Evgeniy Stepanov369a9a62013-10-23 13:57:47 +0000357 struct __sanitizer_ether_addr {
358 u8 octet[6];
359 };
360
Evgeniy Stepanovcf390322013-10-02 14:30:03 +0000361 struct __sanitizer_tm {
362 int tm_sec;
363 int tm_min;
364 int tm_hour;
365 int tm_mday;
366 int tm_mon;
367 int tm_year;
368 int tm_wday;
369 int tm_yday;
370 int tm_isdst;
371 long int tm_gmtoff;
372 const char *tm_zone;
373 };
374
Evgeniy Stepanov4d7297d2013-10-18 09:41:43 +0000375#if SANITIZER_LINUX
376 struct __sanitizer_mntent {
377 char *mnt_fsname;
378 char *mnt_dir;
379 char *mnt_type;
380 char *mnt_opts;
381 int mnt_freq;
382 int mnt_passno;
383 };
384#endif
385
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700386#if SANITIZER_MAC || SANITIZER_FREEBSD
Evgeniy Stepanove2159802013-05-29 11:55:27 +0000387 struct __sanitizer_msghdr {
388 void *msg_name;
389 unsigned msg_namelen;
390 struct __sanitizer_iovec *msg_iov;
391 unsigned msg_iovlen;
392 void *msg_control;
393 unsigned msg_controllen;
394 int msg_flags;
395 };
396 struct __sanitizer_cmsghdr {
397 unsigned cmsg_len;
398 int cmsg_level;
399 int cmsg_type;
400 };
401#else
Evgeniy Stepanov9666d892013-05-29 11:30:00 +0000402 struct __sanitizer_msghdr {
403 void *msg_name;
404 unsigned msg_namelen;
405 struct __sanitizer_iovec *msg_iov;
406 uptr msg_iovlen;
407 void *msg_control;
408 uptr msg_controllen;
409 int msg_flags;
410 };
Evgeniy Stepanov9666d892013-05-29 11:30:00 +0000411 struct __sanitizer_cmsghdr {
412 uptr cmsg_len;
413 int cmsg_level;
414 int cmsg_type;
415 };
Evgeniy Stepanove2159802013-05-29 11:55:27 +0000416#endif
Evgeniy Stepanov10fd3222013-03-13 09:01:40 +0000417
Evgeniy Stepanova0379b52013-06-27 09:37:27 +0000418#if SANITIZER_MAC
419 struct __sanitizer_dirent {
Alexey Samsonovb6bde4d2013-07-16 11:54:40 +0000420 unsigned long long d_ino;
421 unsigned long long d_seekoff;
Evgeniy Stepanova0379b52013-06-27 09:37:27 +0000422 unsigned short d_reclen;
423 // more fields that we don't care about
424 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700425#elif SANITIZER_FREEBSD
426 struct __sanitizer_dirent {
427 unsigned int d_fileno;
428 unsigned short d_reclen;
429 // more fields that we don't care about
430 };
Kostya Serebryanye041c602013-11-06 17:47:39 +0000431#elif SANITIZER_ANDROID || defined(__x86_64__)
Evgeniy Stepanova0379b52013-06-27 09:37:27 +0000432 struct __sanitizer_dirent {
433 unsigned long long d_ino;
434 unsigned long long d_off;
435 unsigned short d_reclen;
436 // more fields that we don't care about
437 };
438#else
439 struct __sanitizer_dirent {
440 uptr d_ino;
441 uptr d_off;
442 unsigned short d_reclen;
443 // more fields that we don't care about
444 };
445#endif
446
447#if SANITIZER_LINUX && !SANITIZER_ANDROID
448 struct __sanitizer_dirent64 {
Chandler Carruth5a482cd2013-07-11 18:51:40 +0000449 unsigned long long d_ino;
450 unsigned long long d_off;
Evgeniy Stepanova0379b52013-06-27 09:37:27 +0000451 unsigned short d_reclen;
452 // more fields that we don't care about
453 };
454#endif
455
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700456// 'clock_t' is 32 bits wide on x64 FreeBSD
457#if SANITIZER_FREEBSD
458 typedef int __sanitizer_clock_t;
459#elif defined(__x86_64__) && !defined(_LP64)
460 typedef long long __sanitizer_clock_t;
461#else
462 typedef long __sanitizer_clock_t;
463#endif
464
Stephen Hines6a211c52014-07-21 00:49:56 -0700465#if SANITIZER_LINUX
466 typedef int __sanitizer_clockid_t;
467#endif
468
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700469#if SANITIZER_LINUX || SANITIZER_FREEBSD
Stephen Hines6a211c52014-07-21 00:49:56 -0700470#if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__)\
471 || defined(__mips__)
Evgeniy Stepanova3cb27e2013-09-06 15:34:17 +0000472 typedef unsigned __sanitizer___kernel_uid_t;
473 typedef unsigned __sanitizer___kernel_gid_t;
474#else
Evgeniy Stepanov85626e82013-09-09 06:18:07 +0000475 typedef unsigned short __sanitizer___kernel_uid_t;
Evgeniy Stepanova3cb27e2013-09-06 15:34:17 +0000476 typedef unsigned short __sanitizer___kernel_gid_t;
Bill Wendling7f790ca2013-12-16 02:36:46 +0000477#endif
478#if defined(__x86_64__) && !defined(_LP64)
479 typedef long long __sanitizer___kernel_off_t;
480#else
Kostya Serebryanye041c602013-11-06 17:47:39 +0000481 typedef long __sanitizer___kernel_off_t;
Evgeniy Stepanova3cb27e2013-09-06 15:34:17 +0000482#endif
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000483
Stephen Hines6d186232014-11-26 17:56:19 -0800484#if defined(__powerpc__) || defined(__mips__)
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000485 typedef unsigned int __sanitizer___kernel_old_uid_t;
486 typedef unsigned int __sanitizer___kernel_old_gid_t;
487#else
Evgeniy Stepanova3cb27e2013-09-06 15:34:17 +0000488 typedef unsigned short __sanitizer___kernel_old_uid_t;
489 typedef unsigned short __sanitizer___kernel_old_gid_t;
Evgeniy Stepanov0d2a9352013-11-22 14:01:23 +0000490#endif
491
Evgeniy Stepanova3cb27e2013-09-06 15:34:17 +0000492 typedef long long __sanitizer___kernel_loff_t;
493 typedef struct {
494 unsigned long fds_bits[1024 / (8 * sizeof(long))];
495 } __sanitizer___kernel_fd_set;
496#endif
497
Evgeniy Stepanov10fd3222013-03-13 09:01:40 +0000498 // This thing depends on the platform. We are only interested in the upper
499 // limit. Verified with a compiler assert in .cc.
500 const int pthread_attr_t_max_sz = 128;
501 union __sanitizer_pthread_attr_t {
Evgeniy Stepanov0ecc4372013-03-13 10:20:35 +0000502 char size[pthread_attr_t_max_sz]; // NOLINT
Evgeniy Stepanov10fd3222013-03-13 09:01:40 +0000503 void *align;
504 };
Evgeniy Stepanov06658ea2013-04-04 08:22:52 +0000505
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000506#if SANITIZER_ANDROID
507 typedef unsigned long __sanitizer_sigset_t;
508#elif SANITIZER_MAC
509 typedef unsigned __sanitizer_sigset_t;
510#elif SANITIZER_LINUX
511 struct __sanitizer_sigset_t {
512 // The size is determined by looking at sizeof of real sigset_t on linux.
513 uptr val[128 / sizeof(uptr)];
514 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700515#elif SANITIZER_FREEBSD
516 struct __sanitizer_sigset_t {
517 // uint32_t * 4
518 unsigned int __bits[4];
519 };
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000520#endif
Evgeniy Stepanov06658ea2013-04-04 08:22:52 +0000521
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700522 // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700523#if SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 64)
524 struct __sanitizer_sigaction {
525 unsigned sa_flags;
526 union {
527 void (*sigaction)(int sig, void *siginfo, void *uctx);
528 void (*handler)(int sig);
529 };
530 __sanitizer_sigset_t sa_mask;
531 void (*sa_restorer)();
532 };
533#elif SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32)
534 struct __sanitizer_sigaction {
535 union {
536 void (*sigaction)(int sig, void *siginfo, void *uctx);
537 void (*handler)(int sig);
538 };
539 __sanitizer_sigset_t sa_mask;
540 uptr sa_flags;
541 void (*sa_restorer)();
542 };
543#else // !SANITIZER_ANDROID
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000544 struct __sanitizer_sigaction {
Stephen Hines6a211c52014-07-21 00:49:56 -0700545#if defined(__mips__) && !SANITIZER_FREEBSD
546 unsigned int sa_flags;
547#endif
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000548 union {
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700549 void (*sigaction)(int sig, void *siginfo, void *uctx);
550 void (*handler)(int sig);
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000551 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700552#if SANITIZER_FREEBSD
553 int sa_flags;
554 __sanitizer_sigset_t sa_mask;
555#else
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000556 __sanitizer_sigset_t sa_mask;
Stephen Hines6a211c52014-07-21 00:49:56 -0700557#ifndef __mips__
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000558 int sa_flags;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700559#endif
Stephen Hines6a211c52014-07-21 00:49:56 -0700560#endif
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000561#if SANITIZER_LINUX
562 void (*sa_restorer)();
563#endif
Stephen Hines6a211c52014-07-21 00:49:56 -0700564#if defined(__mips__) && (SANITIZER_WORDSIZE == 32)
565 int sa_resv[1];
566#endif
Evgeniy Stepanov06658ea2013-04-04 08:22:52 +0000567 };
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700568#endif // !SANITIZER_ANDROID
Evgeniy Stepanov06658ea2013-04-04 08:22:52 +0000569
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700570#if SANITIZER_FREEBSD
571 typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t;
Stephen Hines86277eb2015-03-23 12:06:32 -0700572#elif defined(__mips__)
573 struct __sanitizer_kernel_sigset_t {
574 u8 sig[16];
575 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700576#else
Dmitry Vyukov5f4984d2013-10-15 12:57:59 +0000577 struct __sanitizer_kernel_sigset_t {
578 u8 sig[8];
579 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700580#endif
Dmitry Vyukov5f4984d2013-10-15 12:57:59 +0000581
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700582 // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros.
Dmitry Vyukov5f4984d2013-10-15 12:57:59 +0000583 struct __sanitizer_kernel_sigaction_t {
584 union {
Dmitry Vyukov5f4984d2013-10-15 12:57:59 +0000585 void (*handler)(int signo);
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700586 void (*sigaction)(int signo, void *info, void *ctx);
Dmitry Vyukov5f4984d2013-10-15 12:57:59 +0000587 };
588 unsigned long sa_flags;
589 void (*sa_restorer)(void);
590 __sanitizer_kernel_sigset_t sa_mask;
591 };
592
Evgeniy Stepanov06658ea2013-04-04 08:22:52 +0000593 extern uptr sig_ign;
594 extern uptr sig_dfl;
Evgeniy Stepanovb32d1bf2013-08-27 11:10:04 +0000595 extern uptr sa_siginfo;
Evgeniy Stepanov9530eb72013-04-23 14:05:15 +0000596
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000597#if SANITIZER_LINUX
598 extern int e_tabsz;
599#endif
600
Evgeniy Stepanov9d600872013-06-24 13:56:14 +0000601 extern int af_inet;
602 extern int af_inet6;
Evgeniy Stepanov9530eb72013-04-23 14:05:15 +0000603 uptr __sanitizer_in_addr_sz(int af);
Evgeniy Stepanov1aad6b52013-05-17 12:51:13 +0000604
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700605#if SANITIZER_LINUX || SANITIZER_FREEBSD
Evgeniy Stepanov1aad6b52013-05-17 12:51:13 +0000606 struct __sanitizer_dl_phdr_info {
607 uptr dlpi_addr;
608 const char *dlpi_name;
609 const void *dlpi_phdr;
610 short dlpi_phnum;
611 };
612#endif
Evgeniy Stepanov447ef192013-05-22 12:50:26 +0000613
614 struct __sanitizer_addrinfo {
615 int ai_flags;
616 int ai_family;
617 int ai_socktype;
618 int ai_protocol;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700619#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
Evgeniy Stepanov73c98782013-05-22 14:26:52 +0000620 unsigned ai_addrlen;
621 char *ai_canonname;
622 void *ai_addr;
623#else // LINUX
Evgeniy Stepanov00c35cf2013-05-31 10:46:51 +0000624 unsigned ai_addrlen;
Evgeniy Stepanov73c98782013-05-22 14:26:52 +0000625 void *ai_addr;
626 char *ai_canonname;
627#endif
Evgeniy Stepanov447ef192013-05-22 12:50:26 +0000628 struct __sanitizer_addrinfo *ai_next;
629 };
Evgeniy Stepanov0a2cc372013-05-23 11:10:23 +0000630
631 struct __sanitizer_hostent {
632 char *h_name;
633 char **h_aliases;
634 int h_addrtype;
635 int h_length;
636 char **h_addr_list;
637 };
638
Evgeniy Stepanove18e3f02013-08-12 13:19:53 +0000639 struct __sanitizer_pollfd {
640 int fd;
641 short events;
642 short revents;
643 };
644
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700645#if SANITIZER_ANDROID || SANITIZER_MAC || SANITIZER_FREEBSD
Evgeniy Stepanove18e3f02013-08-12 13:19:53 +0000646 typedef unsigned __sanitizer_nfds_t;
647#else
648 typedef unsigned long __sanitizer_nfds_t;
649#endif
650
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700651#if !SANITIZER_ANDROID
652# if SANITIZER_LINUX
Evgeniy Stepanov906f2c12013-07-02 14:08:52 +0000653 struct __sanitizer_glob_t {
654 uptr gl_pathc;
655 char **gl_pathv;
Evgeniy Stepanov3fa122e2013-07-09 12:07:59 +0000656 uptr gl_offs;
657 int gl_flags;
Timur Iskhodzhanoveaca82c2013-07-15 16:11:39 +0000658
659 void (*gl_closedir)(void *dirp);
660 void *(*gl_readdir)(void *dirp);
Evgeniy Stepanov3fa122e2013-07-09 12:07:59 +0000661 void *(*gl_opendir)(const char *);
662 int (*gl_lstat)(const char *, void *);
663 int (*gl_stat)(const char *, void *);
Evgeniy Stepanov906f2c12013-07-02 14:08:52 +0000664 };
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700665# elif SANITIZER_FREEBSD
666 struct __sanitizer_glob_t {
667 uptr gl_pathc;
668 uptr gl_matchc;
669 uptr gl_offs;
670 int gl_flags;
671 char **gl_pathv;
672 int (*gl_errfunc)(const char*, int);
673 void (*gl_closedir)(void *dirp);
674 struct dirent *(*gl_readdir)(void *dirp);
675 void *(*gl_opendir)(const char*);
676 int (*gl_lstat)(const char*, void* /* struct stat* */);
677 int (*gl_stat)(const char*, void* /* struct stat* */);
678 };
679# endif // SANITIZER_FREEBSD
Evgeniy Stepanov906f2c12013-07-02 14:08:52 +0000680
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700681# if SANITIZER_LINUX || SANITIZER_FREEBSD
Evgeniy Stepanov906f2c12013-07-02 14:08:52 +0000682 extern int glob_nomatch;
Evgeniy Stepanov3fa122e2013-07-09 12:07:59 +0000683 extern int glob_altdirfunc;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700684# endif
685#endif // !SANITIZER_ANDROID
Evgeniy Stepanov906f2c12013-07-02 14:08:52 +0000686
Evgeniy Stepanov12eb79d2013-07-09 09:53:37 +0000687 extern unsigned path_max;
688
Evgeniy Stepanovc5a38552013-09-24 14:38:22 +0000689 struct __sanitizer_wordexp_t {
690 uptr we_wordc;
691 char **we_wordv;
692 uptr we_offs;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700693#if SANITIZER_FREEBSD
694 char *we_strings;
695 uptr we_nbytes;
696#endif
Evgeniy Stepanovc5a38552013-09-24 14:38:22 +0000697 };
698
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700699#if SANITIZER_LINUX && !SANITIZER_ANDROID
700 struct __sanitizer_FILE {
701 int _flags;
702 char *_IO_read_ptr;
703 char *_IO_read_end;
704 char *_IO_read_base;
705 char *_IO_write_base;
706 char *_IO_write_ptr;
707 char *_IO_write_end;
708 char *_IO_buf_base;
709 char *_IO_buf_end;
710 char *_IO_save_base;
711 char *_IO_backup_base;
712 char *_IO_save_end;
713 void *_markers;
714 __sanitizer_FILE *_chain;
715 int _fileno;
716 };
717# define SANITIZER_HAS_STRUCT_FILE 1
718#else
719 typedef void __sanitizer_FILE;
720# define SANITIZER_HAS_STRUCT_FILE 0
721#endif
722
Evgeniy Stepanov22d87672013-07-05 08:57:47 +0000723#if SANITIZER_LINUX && !SANITIZER_ANDROID && \
Stephen Hines86277eb2015-03-23 12:06:32 -0700724 (defined(__i386) || defined(__x86_64) || defined(__mips64))
Evgeniy Stepanov341b9e62013-06-28 11:02:43 +0000725 extern unsigned struct_user_regs_struct_sz;
726 extern unsigned struct_user_fpregs_struct_sz;
727 extern unsigned struct_user_fpxregs_struct_sz;
728
Evgeniy Stepanov3ee98e32013-10-29 17:59:45 +0000729 extern int ptrace_peektext;
730 extern int ptrace_peekdata;
731 extern int ptrace_peekuser;
Evgeniy Stepanov341b9e62013-06-28 11:02:43 +0000732 extern int ptrace_getregs;
733 extern int ptrace_setregs;
734 extern int ptrace_getfpregs;
735 extern int ptrace_setfpregs;
736 extern int ptrace_getfpxregs;
737 extern int ptrace_setfpxregs;
738 extern int ptrace_getsiginfo;
739 extern int ptrace_setsiginfo;
740 extern int ptrace_getregset;
741 extern int ptrace_setregset;
Stephen Hines6a211c52014-07-21 00:49:56 -0700742 extern int ptrace_geteventmsg;
Evgeniy Stepanov341b9e62013-06-28 11:02:43 +0000743#endif
744
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700745#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
Evgeniy Stepanov10362d62013-10-24 14:47:34 +0000746 extern unsigned struct_shminfo_sz;
747 extern unsigned struct_shm_info_sz;
748 extern int shmctl_ipc_stat;
749 extern int shmctl_ipc_info;
750 extern int shmctl_shm_info;
751 extern int shmctl_shm_stat;
752#endif
753
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700754 extern int map_fixed;
755
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000756 // ioctl arguments
Evgeniy Stepanov4757c472013-06-07 15:49:38 +0000757 struct __sanitizer_ifconf {
758 int ifc_len;
759 union {
760 void *ifcu_req;
761 } ifc_ifcu;
Evgeniy Stepanov89d1eee2013-06-19 13:21:38 +0000762#if SANITIZER_MAC
763 } __attribute__((packed));
764#else
Evgeniy Stepanov4757c472013-06-07 15:49:38 +0000765 };
Evgeniy Stepanov89d1eee2013-06-19 13:21:38 +0000766#endif
Evgeniy Stepanov4757c472013-06-07 15:49:38 +0000767
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700768#if SANITIZER_LINUX && !SANITIZER_ANDROID
769struct __sanitizer__obstack_chunk {
770 char *limit;
771 struct __sanitizer__obstack_chunk *prev;
772};
773
774struct __sanitizer_obstack {
775 long chunk_size;
776 struct __sanitizer__obstack_chunk *chunk;
777 char *object_base;
778 char *next_free;
779 uptr more_fields[7];
780};
781#endif
782
783#define IOC_NRBITS 8
784#define IOC_TYPEBITS 8
Stephen Hines6a211c52014-07-21 00:49:56 -0700785#if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__)
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700786#define IOC_SIZEBITS 13
787#define IOC_DIRBITS 3
788#define IOC_NONE 1U
789#define IOC_WRITE 4U
790#define IOC_READ 2U
791#else
792#define IOC_SIZEBITS 14
793#define IOC_DIRBITS 2
794#define IOC_NONE 0U
795#define IOC_WRITE 1U
796#define IOC_READ 2U
797#endif
798#define IOC_NRMASK ((1 << IOC_NRBITS) - 1)
799#define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1)
800#define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1)
801#if defined(IOC_DIRMASK)
802#undef IOC_DIRMASK
803#endif
804#define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1)
805#define IOC_NRSHIFT 0
806#define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS)
807#define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS)
808#define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS)
809#define EVIOC_EV_MAX 0x1f
810#define EVIOC_ABS_MAX 0x3f
811
812#define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK)
813#define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK)
814#define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)
815#define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +0000816
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000817 extern unsigned struct_arpreq_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000818 extern unsigned struct_ifreq_sz;
819 extern unsigned struct_termios_sz;
820 extern unsigned struct_winsize_sz;
821
822#if SANITIZER_LINUX
823 extern unsigned struct_cdrom_msf_sz;
824 extern unsigned struct_cdrom_multisession_sz;
825 extern unsigned struct_cdrom_read_audio_sz;
826 extern unsigned struct_cdrom_subchnl_sz;
827 extern unsigned struct_cdrom_ti_sz;
828 extern unsigned struct_cdrom_tocentry_sz;
829 extern unsigned struct_cdrom_tochdr_sz;
830 extern unsigned struct_cdrom_volctrl_sz;
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +0000831 extern unsigned struct_ff_effect_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000832 extern unsigned struct_floppy_drive_params_sz;
833 extern unsigned struct_floppy_drive_struct_sz;
834 extern unsigned struct_floppy_fdc_state_sz;
835 extern unsigned struct_floppy_max_errors_sz;
836 extern unsigned struct_floppy_raw_cmd_sz;
837 extern unsigned struct_floppy_struct_sz;
838 extern unsigned struct_floppy_write_errors_sz;
839 extern unsigned struct_format_descr_sz;
840 extern unsigned struct_hd_driveid_sz;
841 extern unsigned struct_hd_geometry_sz;
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +0000842 extern unsigned struct_input_absinfo_sz;
843 extern unsigned struct_input_id_sz;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700844 extern unsigned struct_mtpos_sz;
845 extern unsigned struct_termio_sz;
846 extern unsigned struct_vt_consize_sz;
847 extern unsigned struct_vt_sizes_sz;
848 extern unsigned struct_vt_stat_sz;
849#endif // SANITIZER_LINUX
850
851#if SANITIZER_LINUX || SANITIZER_FREEBSD
852 extern unsigned struct_copr_buffer_sz;
853 extern unsigned struct_copr_debug_buf_sz;
854 extern unsigned struct_copr_msg_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000855 extern unsigned struct_midi_info_sz;
856 extern unsigned struct_mtget_sz;
857 extern unsigned struct_mtop_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000858 extern unsigned struct_rtentry_sz;
859 extern unsigned struct_sbi_instrument_sz;
860 extern unsigned struct_seq_event_rec_sz;
861 extern unsigned struct_synth_info_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000862 extern unsigned struct_vt_mode_sz;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700863#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000864
865#if SANITIZER_LINUX && !SANITIZER_ANDROID
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000866 extern unsigned struct_ax25_parms_struct_sz;
867 extern unsigned struct_cyclades_monitor_sz;
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +0000868 extern unsigned struct_input_keymap_entry_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000869 extern unsigned struct_ipx_config_data_sz;
870 extern unsigned struct_kbdiacrs_sz;
871 extern unsigned struct_kbentry_sz;
872 extern unsigned struct_kbkeycode_sz;
873 extern unsigned struct_kbsentry_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000874 extern unsigned struct_mtconfiginfo_sz;
875 extern unsigned struct_nr_parms_struct_sz;
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000876 extern unsigned struct_scc_modem_sz;
877 extern unsigned struct_scc_stat_sz;
878 extern unsigned struct_serial_multiport_struct_sz;
879 extern unsigned struct_serial_struct_sz;
880 extern unsigned struct_sockaddr_ax25_sz;
881 extern unsigned struct_unimapdesc_sz;
882 extern unsigned struct_unimapinit_sz;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700883#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
884
885#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
886 extern unsigned struct_audio_buf_info_sz;
887 extern unsigned struct_ppp_stats_sz;
888#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
Dmitry Vyukov4f0fd8e2013-06-10 10:00:54 +0000889
Bob Wilsonefb02262013-11-15 19:13:08 +0000890#if !SANITIZER_ANDROID && !SANITIZER_MAC
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +0000891 extern unsigned struct_sioc_sg_req_sz;
892 extern unsigned struct_sioc_vif_req_sz;
893#endif
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +0000894
895 // ioctl request identifiers
Evgeniy Stepanovbb273d52013-06-21 10:54:57 +0000896
897 // A special value to mark ioctls that are not present on the target platform,
898 // when it can not be determined without including any system headers.
Stephen Hines6d186232014-11-26 17:56:19 -0800899 extern const unsigned IOCTL_NOT_PRESENT;
Evgeniy Stepanovbb273d52013-06-21 10:54:57 +0000900
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +0000901 extern unsigned IOCTL_FIOASYNC;
902 extern unsigned IOCTL_FIOCLEX;
903 extern unsigned IOCTL_FIOGETOWN;
904 extern unsigned IOCTL_FIONBIO;
905 extern unsigned IOCTL_FIONCLEX;
906 extern unsigned IOCTL_FIOSETOWN;
907 extern unsigned IOCTL_SIOCADDMULTI;
908 extern unsigned IOCTL_SIOCATMARK;
909 extern unsigned IOCTL_SIOCDELMULTI;
910 extern unsigned IOCTL_SIOCGIFADDR;
911 extern unsigned IOCTL_SIOCGIFBRDADDR;
912 extern unsigned IOCTL_SIOCGIFCONF;
913 extern unsigned IOCTL_SIOCGIFDSTADDR;
914 extern unsigned IOCTL_SIOCGIFFLAGS;
915 extern unsigned IOCTL_SIOCGIFMETRIC;
916 extern unsigned IOCTL_SIOCGIFMTU;
917 extern unsigned IOCTL_SIOCGIFNETMASK;
918 extern unsigned IOCTL_SIOCGPGRP;
919 extern unsigned IOCTL_SIOCSIFADDR;
920 extern unsigned IOCTL_SIOCSIFBRDADDR;
921 extern unsigned IOCTL_SIOCSIFDSTADDR;
922 extern unsigned IOCTL_SIOCSIFFLAGS;
923 extern unsigned IOCTL_SIOCSIFMETRIC;
924 extern unsigned IOCTL_SIOCSIFMTU;
925 extern unsigned IOCTL_SIOCSIFNETMASK;
926 extern unsigned IOCTL_SIOCSPGRP;
927 extern unsigned IOCTL_TIOCCONS;
928 extern unsigned IOCTL_TIOCEXCL;
929 extern unsigned IOCTL_TIOCGETD;
930 extern unsigned IOCTL_TIOCGPGRP;
931 extern unsigned IOCTL_TIOCGWINSZ;
932 extern unsigned IOCTL_TIOCMBIC;
933 extern unsigned IOCTL_TIOCMBIS;
934 extern unsigned IOCTL_TIOCMGET;
935 extern unsigned IOCTL_TIOCMSET;
936 extern unsigned IOCTL_TIOCNOTTY;
937 extern unsigned IOCTL_TIOCNXCL;
938 extern unsigned IOCTL_TIOCOUTQ;
939 extern unsigned IOCTL_TIOCPKT;
940 extern unsigned IOCTL_TIOCSCTTY;
941 extern unsigned IOCTL_TIOCSETD;
942 extern unsigned IOCTL_TIOCSPGRP;
943 extern unsigned IOCTL_TIOCSTI;
944 extern unsigned IOCTL_TIOCSWINSZ;
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700945#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +0000946 extern unsigned IOCTL_SIOCGETSGCNT;
947 extern unsigned IOCTL_SIOCGETVIFCNT;
948#endif
949#if SANITIZER_LINUX
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +0000950 extern unsigned IOCTL_EVIOCGABS;
951 extern unsigned IOCTL_EVIOCGBIT;
952 extern unsigned IOCTL_EVIOCGEFFECTS;
953 extern unsigned IOCTL_EVIOCGID;
954 extern unsigned IOCTL_EVIOCGKEY;
955 extern unsigned IOCTL_EVIOCGKEYCODE;
956 extern unsigned IOCTL_EVIOCGLED;
957 extern unsigned IOCTL_EVIOCGNAME;
958 extern unsigned IOCTL_EVIOCGPHYS;
959 extern unsigned IOCTL_EVIOCGRAB;
960 extern unsigned IOCTL_EVIOCGREP;
961 extern unsigned IOCTL_EVIOCGSND;
962 extern unsigned IOCTL_EVIOCGSW;
963 extern unsigned IOCTL_EVIOCGUNIQ;
964 extern unsigned IOCTL_EVIOCGVERSION;
965 extern unsigned IOCTL_EVIOCRMFF;
966 extern unsigned IOCTL_EVIOCSABS;
967 extern unsigned IOCTL_EVIOCSFF;
968 extern unsigned IOCTL_EVIOCSKEYCODE;
969 extern unsigned IOCTL_EVIOCSREP;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +0000970 extern unsigned IOCTL_BLKFLSBUF;
971 extern unsigned IOCTL_BLKGETSIZE;
972 extern unsigned IOCTL_BLKRAGET;
973 extern unsigned IOCTL_BLKRASET;
974 extern unsigned IOCTL_BLKROGET;
975 extern unsigned IOCTL_BLKROSET;
976 extern unsigned IOCTL_BLKRRPART;
977 extern unsigned IOCTL_CDROMAUDIOBUFSIZ;
978 extern unsigned IOCTL_CDROMEJECT;
979 extern unsigned IOCTL_CDROMEJECT_SW;
980 extern unsigned IOCTL_CDROMMULTISESSION;
981 extern unsigned IOCTL_CDROMPAUSE;
982 extern unsigned IOCTL_CDROMPLAYMSF;
983 extern unsigned IOCTL_CDROMPLAYTRKIND;
984 extern unsigned IOCTL_CDROMREADAUDIO;
985 extern unsigned IOCTL_CDROMREADCOOKED;
986 extern unsigned IOCTL_CDROMREADMODE1;
987 extern unsigned IOCTL_CDROMREADMODE2;
988 extern unsigned IOCTL_CDROMREADRAW;
989 extern unsigned IOCTL_CDROMREADTOCENTRY;
990 extern unsigned IOCTL_CDROMREADTOCHDR;
991 extern unsigned IOCTL_CDROMRESET;
992 extern unsigned IOCTL_CDROMRESUME;
993 extern unsigned IOCTL_CDROMSEEK;
994 extern unsigned IOCTL_CDROMSTART;
995 extern unsigned IOCTL_CDROMSTOP;
996 extern unsigned IOCTL_CDROMSUBCHNL;
997 extern unsigned IOCTL_CDROMVOLCTRL;
998 extern unsigned IOCTL_CDROMVOLREAD;
999 extern unsigned IOCTL_CDROM_GET_UPC;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001000 extern unsigned IOCTL_FDCLRPRM;
1001 extern unsigned IOCTL_FDDEFPRM;
1002 extern unsigned IOCTL_FDFLUSH;
1003 extern unsigned IOCTL_FDFMTBEG;
1004 extern unsigned IOCTL_FDFMTEND;
1005 extern unsigned IOCTL_FDFMTTRK;
1006 extern unsigned IOCTL_FDGETDRVPRM;
1007 extern unsigned IOCTL_FDGETDRVSTAT;
1008 extern unsigned IOCTL_FDGETDRVTYP;
1009 extern unsigned IOCTL_FDGETFDCSTAT;
1010 extern unsigned IOCTL_FDGETMAXERRS;
1011 extern unsigned IOCTL_FDGETPRM;
1012 extern unsigned IOCTL_FDMSGOFF;
1013 extern unsigned IOCTL_FDMSGON;
1014 extern unsigned IOCTL_FDPOLLDRVSTAT;
1015 extern unsigned IOCTL_FDRAWCMD;
1016 extern unsigned IOCTL_FDRESET;
1017 extern unsigned IOCTL_FDSETDRVPRM;
1018 extern unsigned IOCTL_FDSETEMSGTRESH;
1019 extern unsigned IOCTL_FDSETMAXERRS;
1020 extern unsigned IOCTL_FDSETPRM;
1021 extern unsigned IOCTL_FDTWADDLE;
1022 extern unsigned IOCTL_FDWERRORCLR;
1023 extern unsigned IOCTL_FDWERRORGET;
1024 extern unsigned IOCTL_HDIO_DRIVE_CMD;
1025 extern unsigned IOCTL_HDIO_GETGEO;
1026 extern unsigned IOCTL_HDIO_GET_32BIT;
1027 extern unsigned IOCTL_HDIO_GET_DMA;
1028 extern unsigned IOCTL_HDIO_GET_IDENTITY;
1029 extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS;
1030 extern unsigned IOCTL_HDIO_GET_MULTCOUNT;
1031 extern unsigned IOCTL_HDIO_GET_NOWERR;
1032 extern unsigned IOCTL_HDIO_GET_UNMASKINTR;
1033 extern unsigned IOCTL_HDIO_SET_32BIT;
1034 extern unsigned IOCTL_HDIO_SET_DMA;
1035 extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS;
1036 extern unsigned IOCTL_HDIO_SET_MULTCOUNT;
1037 extern unsigned IOCTL_HDIO_SET_NOWERR;
1038 extern unsigned IOCTL_HDIO_SET_UNMASKINTR;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001039 extern unsigned IOCTL_MTIOCPOS;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001040 extern unsigned IOCTL_PPPIOCGASYNCMAP;
1041 extern unsigned IOCTL_PPPIOCGDEBUG;
1042 extern unsigned IOCTL_PPPIOCGFLAGS;
1043 extern unsigned IOCTL_PPPIOCGUNIT;
1044 extern unsigned IOCTL_PPPIOCGXASYNCMAP;
1045 extern unsigned IOCTL_PPPIOCSASYNCMAP;
1046 extern unsigned IOCTL_PPPIOCSDEBUG;
1047 extern unsigned IOCTL_PPPIOCSFLAGS;
1048 extern unsigned IOCTL_PPPIOCSMAXCID;
1049 extern unsigned IOCTL_PPPIOCSMRU;
1050 extern unsigned IOCTL_PPPIOCSXASYNCMAP;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001051 extern unsigned IOCTL_SIOCDARP;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001052 extern unsigned IOCTL_SIOCDRARP;
1053 extern unsigned IOCTL_SIOCGARP;
1054 extern unsigned IOCTL_SIOCGIFENCAP;
1055 extern unsigned IOCTL_SIOCGIFHWADDR;
1056 extern unsigned IOCTL_SIOCGIFMAP;
1057 extern unsigned IOCTL_SIOCGIFMEM;
1058 extern unsigned IOCTL_SIOCGIFNAME;
1059 extern unsigned IOCTL_SIOCGIFSLAVE;
1060 extern unsigned IOCTL_SIOCGRARP;
1061 extern unsigned IOCTL_SIOCGSTAMP;
1062 extern unsigned IOCTL_SIOCSARP;
1063 extern unsigned IOCTL_SIOCSIFENCAP;
1064 extern unsigned IOCTL_SIOCSIFHWADDR;
1065 extern unsigned IOCTL_SIOCSIFLINK;
1066 extern unsigned IOCTL_SIOCSIFMAP;
1067 extern unsigned IOCTL_SIOCSIFMEM;
1068 extern unsigned IOCTL_SIOCSIFSLAVE;
1069 extern unsigned IOCTL_SIOCSRARP;
1070 extern unsigned IOCTL_SNDCTL_COPR_HALT;
1071 extern unsigned IOCTL_SNDCTL_COPR_LOAD;
1072 extern unsigned IOCTL_SNDCTL_COPR_RCODE;
1073 extern unsigned IOCTL_SNDCTL_COPR_RCVMSG;
1074 extern unsigned IOCTL_SNDCTL_COPR_RDATA;
1075 extern unsigned IOCTL_SNDCTL_COPR_RESET;
1076 extern unsigned IOCTL_SNDCTL_COPR_RUN;
1077 extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;
1078 extern unsigned IOCTL_SNDCTL_COPR_WCODE;
1079 extern unsigned IOCTL_SNDCTL_COPR_WDATA;
Stephen Hines2d1fdb22014-05-28 23:58:16 -07001080 extern unsigned IOCTL_TCFLSH;
1081 extern unsigned IOCTL_TCGETA;
1082 extern unsigned IOCTL_TCGETS;
1083 extern unsigned IOCTL_TCSBRK;
1084 extern unsigned IOCTL_TCSBRKP;
1085 extern unsigned IOCTL_TCSETA;
1086 extern unsigned IOCTL_TCSETAF;
1087 extern unsigned IOCTL_TCSETAW;
1088 extern unsigned IOCTL_TCSETS;
1089 extern unsigned IOCTL_TCSETSF;
1090 extern unsigned IOCTL_TCSETSW;
1091 extern unsigned IOCTL_TCXONC;
1092 extern unsigned IOCTL_TIOCGLCKTRMIOS;
1093 extern unsigned IOCTL_TIOCGSOFTCAR;
1094 extern unsigned IOCTL_TIOCINQ;
1095 extern unsigned IOCTL_TIOCLINUX;
1096 extern unsigned IOCTL_TIOCSERCONFIG;
1097 extern unsigned IOCTL_TIOCSERGETLSR;
1098 extern unsigned IOCTL_TIOCSERGWILD;
1099 extern unsigned IOCTL_TIOCSERSWILD;
1100 extern unsigned IOCTL_TIOCSLCKTRMIOS;
1101 extern unsigned IOCTL_TIOCSSOFTCAR;
1102 extern unsigned IOCTL_VT_DISALLOCATE;
1103 extern unsigned IOCTL_VT_GETSTATE;
1104 extern unsigned IOCTL_VT_RESIZE;
1105 extern unsigned IOCTL_VT_RESIZEX;
1106 extern unsigned IOCTL_VT_SENDSIG;
1107#endif // SANITIZER_LINUX
1108#if SANITIZER_LINUX || SANITIZER_FREEBSD
1109 extern unsigned IOCTL_MTIOCGET;
1110 extern unsigned IOCTL_MTIOCTOP;
1111 extern unsigned IOCTL_SIOCADDRT;
1112 extern unsigned IOCTL_SIOCDELRT;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001113 extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE;
1114 extern unsigned IOCTL_SNDCTL_DSP_GETFMTS;
1115 extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK;
1116 extern unsigned IOCTL_SNDCTL_DSP_POST;
1117 extern unsigned IOCTL_SNDCTL_DSP_RESET;
1118 extern unsigned IOCTL_SNDCTL_DSP_SETFMT;
1119 extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT;
1120 extern unsigned IOCTL_SNDCTL_DSP_SPEED;
1121 extern unsigned IOCTL_SNDCTL_DSP_STEREO;
1122 extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE;
1123 extern unsigned IOCTL_SNDCTL_DSP_SYNC;
1124 extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE;
1125 extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR;
1126 extern unsigned IOCTL_SNDCTL_MIDI_INFO;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001127 extern unsigned IOCTL_SNDCTL_MIDI_PRETIME;
1128 extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE;
1129 extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT;
1130 extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT;
1131 extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS;
1132 extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS;
1133 extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND;
1134 extern unsigned IOCTL_SNDCTL_SEQ_PANIC;
1135 extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE;
1136 extern unsigned IOCTL_SNDCTL_SEQ_RESET;
1137 extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES;
1138 extern unsigned IOCTL_SNDCTL_SEQ_SYNC;
1139 extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI;
1140 extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD;
1141 extern unsigned IOCTL_SNDCTL_SYNTH_INFO;
1142 extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL;
1143 extern unsigned IOCTL_SNDCTL_TMR_CONTINUE;
1144 extern unsigned IOCTL_SNDCTL_TMR_METRONOME;
1145 extern unsigned IOCTL_SNDCTL_TMR_SELECT;
1146 extern unsigned IOCTL_SNDCTL_TMR_SOURCE;
1147 extern unsigned IOCTL_SNDCTL_TMR_START;
1148 extern unsigned IOCTL_SNDCTL_TMR_STOP;
1149 extern unsigned IOCTL_SNDCTL_TMR_TEMPO;
1150 extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE;
1151 extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM;
1152 extern unsigned IOCTL_SOUND_MIXER_READ_BASS;
1153 extern unsigned IOCTL_SOUND_MIXER_READ_CAPS;
1154 extern unsigned IOCTL_SOUND_MIXER_READ_CD;
1155 extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK;
1156 extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE;
1157 extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN;
1158 extern unsigned IOCTL_SOUND_MIXER_READ_IMIX;
1159 extern unsigned IOCTL_SOUND_MIXER_READ_LINE1;
1160 extern unsigned IOCTL_SOUND_MIXER_READ_LINE2;
1161 extern unsigned IOCTL_SOUND_MIXER_READ_LINE3;
1162 extern unsigned IOCTL_SOUND_MIXER_READ_LINE;
1163 extern unsigned IOCTL_SOUND_MIXER_READ_LOUD;
1164 extern unsigned IOCTL_SOUND_MIXER_READ_MIC;
1165 extern unsigned IOCTL_SOUND_MIXER_READ_MUTE;
1166 extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN;
1167 extern unsigned IOCTL_SOUND_MIXER_READ_PCM;
1168 extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV;
1169 extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK;
1170 extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC;
1171 extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER;
1172 extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS;
1173 extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH;
1174 extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE;
1175 extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME;
1176 extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM;
1177 extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS;
1178 extern unsigned IOCTL_SOUND_MIXER_WRITE_CD;
1179 extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE;
1180 extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN;
1181 extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX;
1182 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1;
1183 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2;
1184 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3;
1185 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE;
1186 extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD;
1187 extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC;
1188 extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE;
1189 extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN;
1190 extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM;
1191 extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV;
1192 extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC;
1193 extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER;
1194 extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH;
1195 extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE;
1196 extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME;
1197 extern unsigned IOCTL_SOUND_PCM_READ_BITS;
1198 extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS;
1199 extern unsigned IOCTL_SOUND_PCM_READ_FILTER;
1200 extern unsigned IOCTL_SOUND_PCM_READ_RATE;
1201 extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS;
1202 extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001203 extern unsigned IOCTL_VT_ACTIVATE;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001204 extern unsigned IOCTL_VT_GETMODE;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001205 extern unsigned IOCTL_VT_OPENQRY;
1206 extern unsigned IOCTL_VT_RELDISP;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001207 extern unsigned IOCTL_VT_SETMODE;
1208 extern unsigned IOCTL_VT_WAITACTIVE;
Stephen Hines2d1fdb22014-05-28 23:58:16 -07001209#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
1210
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001211#if SANITIZER_LINUX && !SANITIZER_ANDROID
1212 extern unsigned IOCTL_CYGETDEFTHRESH;
1213 extern unsigned IOCTL_CYGETDEFTIMEOUT;
1214 extern unsigned IOCTL_CYGETMON;
1215 extern unsigned IOCTL_CYGETTHRESH;
1216 extern unsigned IOCTL_CYGETTIMEOUT;
1217 extern unsigned IOCTL_CYSETDEFTHRESH;
1218 extern unsigned IOCTL_CYSETDEFTIMEOUT;
1219 extern unsigned IOCTL_CYSETTHRESH;
1220 extern unsigned IOCTL_CYSETTIMEOUT;
1221 extern unsigned IOCTL_EQL_EMANCIPATE;
1222 extern unsigned IOCTL_EQL_ENSLAVE;
1223 extern unsigned IOCTL_EQL_GETMASTRCFG;
1224 extern unsigned IOCTL_EQL_GETSLAVECFG;
1225 extern unsigned IOCTL_EQL_SETMASTRCFG;
1226 extern unsigned IOCTL_EQL_SETSLAVECFG;
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +00001227 extern unsigned IOCTL_EVIOCGKEYCODE_V2;
1228 extern unsigned IOCTL_EVIOCGPROP;
1229 extern unsigned IOCTL_EVIOCSKEYCODE_V2;
Evgeniy Stepanov7028c1e2013-06-18 13:56:12 +00001230 extern unsigned IOCTL_FS_IOC_GETFLAGS;
1231 extern unsigned IOCTL_FS_IOC_GETVERSION;
1232 extern unsigned IOCTL_FS_IOC_SETFLAGS;
1233 extern unsigned IOCTL_FS_IOC_SETVERSION;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001234 extern unsigned IOCTL_GIO_CMAP;
1235 extern unsigned IOCTL_GIO_FONT;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001236 extern unsigned IOCTL_GIO_UNIMAP;
1237 extern unsigned IOCTL_GIO_UNISCRNMAP;
1238 extern unsigned IOCTL_KDADDIO;
1239 extern unsigned IOCTL_KDDELIO;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001240 extern unsigned IOCTL_KDGETKEYCODE;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001241 extern unsigned IOCTL_KDGKBDIACR;
1242 extern unsigned IOCTL_KDGKBENT;
1243 extern unsigned IOCTL_KDGKBLED;
1244 extern unsigned IOCTL_KDGKBMETA;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001245 extern unsigned IOCTL_KDGKBSENT;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001246 extern unsigned IOCTL_KDMAPDISP;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001247 extern unsigned IOCTL_KDSETKEYCODE;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001248 extern unsigned IOCTL_KDSIGACCEPT;
1249 extern unsigned IOCTL_KDSKBDIACR;
1250 extern unsigned IOCTL_KDSKBENT;
1251 extern unsigned IOCTL_KDSKBLED;
1252 extern unsigned IOCTL_KDSKBMETA;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001253 extern unsigned IOCTL_KDSKBSENT;
1254 extern unsigned IOCTL_KDUNMAPDISP;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001255 extern unsigned IOCTL_LPABORT;
1256 extern unsigned IOCTL_LPABORTOPEN;
1257 extern unsigned IOCTL_LPCAREFUL;
1258 extern unsigned IOCTL_LPCHAR;
1259 extern unsigned IOCTL_LPGETIRQ;
1260 extern unsigned IOCTL_LPGETSTATUS;
1261 extern unsigned IOCTL_LPRESET;
1262 extern unsigned IOCTL_LPSETIRQ;
1263 extern unsigned IOCTL_LPTIME;
1264 extern unsigned IOCTL_LPWAIT;
Chandler Carruth8766b812013-08-18 08:47:06 +00001265 extern unsigned IOCTL_MTIOCGETCONFIG;
1266 extern unsigned IOCTL_MTIOCSETCONFIG;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001267 extern unsigned IOCTL_PIO_CMAP;
1268 extern unsigned IOCTL_PIO_FONT;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001269 extern unsigned IOCTL_PIO_UNIMAP;
1270 extern unsigned IOCTL_PIO_UNIMAPCLR;
1271 extern unsigned IOCTL_PIO_UNISCRNMAP;
1272 extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN;
1273 extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST;
1274 extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE;
1275 extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE;
1276 extern unsigned IOCTL_SIOCAIPXITFCRT;
1277 extern unsigned IOCTL_SIOCAIPXPRISLT;
Chandler Carruth8766b812013-08-18 08:47:06 +00001278 extern unsigned IOCTL_SIOCAX25ADDUID;
1279 extern unsigned IOCTL_SIOCAX25DELUID;
1280 extern unsigned IOCTL_SIOCAX25GETPARMS;
1281 extern unsigned IOCTL_SIOCAX25GETUID;
1282 extern unsigned IOCTL_SIOCAX25NOUID;
1283 extern unsigned IOCTL_SIOCAX25SETPARMS;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001284 extern unsigned IOCTL_SIOCDEVPLIP;
1285 extern unsigned IOCTL_SIOCIPXCFGDATA;
Chandler Carruth8766b812013-08-18 08:47:06 +00001286 extern unsigned IOCTL_SIOCNRDECOBS;
1287 extern unsigned IOCTL_SIOCNRGETPARMS;
1288 extern unsigned IOCTL_SIOCNRRTCTL;
1289 extern unsigned IOCTL_SIOCNRSETPARMS;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001290 extern unsigned IOCTL_SNDCTL_DSP_GETISPACE;
1291 extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001292 extern unsigned IOCTL_TIOCGSERIAL;
1293 extern unsigned IOCTL_TIOCSERGETMULTI;
1294 extern unsigned IOCTL_TIOCSERSETMULTI;
1295 extern unsigned IOCTL_TIOCSSERIAL;
Stephen Hines2d1fdb22014-05-28 23:58:16 -07001296#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
1297
1298#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
1299 extern unsigned IOCTL_GIO_SCRNMAP;
1300 extern unsigned IOCTL_KDDISABIO;
1301 extern unsigned IOCTL_KDENABIO;
1302 extern unsigned IOCTL_KDGETLED;
1303 extern unsigned IOCTL_KDGETMODE;
1304 extern unsigned IOCTL_KDGKBMODE;
1305 extern unsigned IOCTL_KDGKBTYPE;
1306 extern unsigned IOCTL_KDMKTONE;
1307 extern unsigned IOCTL_KDSETLED;
1308 extern unsigned IOCTL_KDSETMODE;
1309 extern unsigned IOCTL_KDSKBMODE;
1310 extern unsigned IOCTL_KIOCSOUND;
1311 extern unsigned IOCTL_PIO_SCRNMAP;
Evgeniy Stepanov2557a1b2013-06-18 09:22:24 +00001312#endif
Sergey Matveev70db33e2013-10-11 14:19:14 +00001313
Stephen Hines2d1fdb22014-05-28 23:58:16 -07001314 extern const int errno_EINVAL;
Dmitry Vyukov11f53092013-11-15 16:58:12 +00001315 extern const int errno_EOWNERDEAD;
Stephen Hines2d1fdb22014-05-28 23:58:16 -07001316
1317 extern const int si_SEGV_MAPERR;
1318 extern const int si_SEGV_ACCERR;
Evgeniy Stepanov9358c582013-02-19 09:19:16 +00001319} // namespace __sanitizer
1320
Evgeniy Stepanovbd659562013-11-01 01:20:39 +00001321#define CHECK_TYPE_SIZE(TYPE) \
1322 COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))
1323
1324#define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER) \
1325 COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *) NULL)->MEMBER) == \
1326 sizeof(((CLASS *) NULL)->MEMBER)); \
1327 COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) == \
1328 offsetof(CLASS, MEMBER))
1329
1330// For sigaction, which is a function and struct at the same time,
1331// and thus requires explicit "struct" in sizeof() expression.
1332#define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER) \
1333 COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *) NULL)->MEMBER) == \
1334 sizeof(((struct CLASS *) NULL)->MEMBER)); \
1335 COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \
1336 offsetof(struct CLASS, MEMBER))
1337
Evgeniy Stepanov9358c582013-02-19 09:19:16 +00001338#endif