1245614Sandrew//===-- sanitizer_platform_interceptors.h -----------------------*- C++ -*-===//
2245614Sandrew//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6245614Sandrew//
7245614Sandrew//===----------------------------------------------------------------------===//
8245614Sandrew//
9245614Sandrew// This file defines macro telling whether sanitizer tools can/should intercept
10245614Sandrew// given library functions on a given platform.
11245614Sandrew//
12245614Sandrew//===----------------------------------------------------------------------===//
13251034Sed#ifndef SANITIZER_PLATFORM_INTERCEPTORS_H
14251034Sed#define SANITIZER_PLATFORM_INTERCEPTORS_H
15245614Sandrew
16360784Sdim#include "sanitizer_glibc_version.h"
17245614Sandrew#include "sanitizer_internal_defs.h"
18245614Sandrew
19327952Sdim#if SANITIZER_POSIX
20327952Sdim# define SI_POSIX 1
21327952Sdim#else
22327952Sdim# define SI_POSIX 0
23327952Sdim#endif
24327952Sdim
25251034Sed#if !SANITIZER_WINDOWS
26321369Sdim# define SI_WINDOWS 0
27245614Sandrew#else
28321369Sdim# define SI_WINDOWS 1
29245614Sandrew#endif
30245614Sandrew
31341825Sdim#if SI_WINDOWS && SI_POSIX
32327952Sdim# error "Windows is not POSIX!"
33321369Sdim#endif
34321369Sdim
35327952Sdim#if SI_POSIX
36344779Sdim# include "sanitizer_platform_limits_freebsd.h"
37327952Sdim# include "sanitizer_platform_limits_netbsd.h"
38344779Sdim# include "sanitizer_platform_limits_openbsd.h"
39327952Sdim# include "sanitizer_platform_limits_posix.h"
40327952Sdim# include "sanitizer_platform_limits_solaris.h"
41327952Sdim#endif
42327952Sdim
43251034Sed#if SANITIZER_LINUX && !SANITIZER_ANDROID
44245614Sandrew# define SI_LINUX_NOT_ANDROID 1
45245614Sandrew#else
46245614Sandrew# define SI_LINUX_NOT_ANDROID 0
47245614Sandrew#endif
48245614Sandrew
49309124Sdim#if SANITIZER_ANDROID
50309124Sdim# define SI_ANDROID 1
51309124Sdim#else
52309124Sdim# define SI_ANDROID 0
53309124Sdim#endif
54309124Sdim
55276789Sdim#if SANITIZER_FREEBSD
56276789Sdim# define SI_FREEBSD 1
57276789Sdim#else
58276789Sdim# define SI_FREEBSD 0
59276789Sdim#endif
60276789Sdim
61321369Sdim#if SANITIZER_NETBSD
62321369Sdim# define SI_NETBSD 1
63321369Sdim#else
64321369Sdim# define SI_NETBSD 0
65321369Sdim#endif
66321369Sdim
67341825Sdim#if SANITIZER_OPENBSD
68341825Sdim#define SI_OPENBSD 1
69341825Sdim#else
70341825Sdim#define SI_OPENBSD 0
71341825Sdim#endif
72341825Sdim
73251034Sed#if SANITIZER_LINUX
74251034Sed# define SI_LINUX 1
75251034Sed#else
76251034Sed# define SI_LINUX 0
77251034Sed#endif
78251034Sed
79251034Sed#if SANITIZER_MAC
80251034Sed# define SI_MAC 1
81309124Sdim# define SI_NOT_MAC 0
82251034Sed#else
83251034Sed# define SI_MAC 0
84309124Sdim# define SI_NOT_MAC 1
85251034Sed#endif
86251034Sed
87274201Sdim#if SANITIZER_IOS
88274201Sdim# define SI_IOS 1
89274201Sdim#else
90274201Sdim# define SI_IOS 0
91274201Sdim#endif
92274201Sdim
93360784Sdim#if SANITIZER_IOSSIM
94360784Sdim# define SI_IOSSIM 1
95360784Sdim#else
96360784Sdim# define SI_IOSSIM 0
97360784Sdim#endif
98360784Sdim
99360784Sdim#if SANITIZER_WATCHOS
100360784Sdim# define SI_WATCHOS 1
101360784Sdim#else
102360784Sdim# define SI_WATCHOS 0
103360784Sdim#endif
104360784Sdim
105360784Sdim#if SANITIZER_TVOS
106360784Sdim# define SI_TVOS 1
107360784Sdim#else
108360784Sdim# define SI_TVOS 0
109360784Sdim#endif
110360784Sdim
111327952Sdim#if SANITIZER_FUCHSIA
112327952Sdim# define SI_NOT_FUCHSIA 0
113309124Sdim#else
114327952Sdim# define SI_NOT_FUCHSIA 1
115309124Sdim#endif
116309124Sdim
117341825Sdim#if SANITIZER_RTEMS
118341825Sdim# define SI_NOT_RTEMS 0
119341825Sdim#else
120341825Sdim# define SI_NOT_RTEMS 1
121341825Sdim#endif
122341825Sdim
123327952Sdim#if SANITIZER_SOLARIS
124327952Sdim# define SI_SOLARIS 1
125327952Sdim#else
126327952Sdim# define SI_SOLARIS 0
127327952Sdim#endif
128327952Sdim
129327952Sdim#if SANITIZER_SOLARIS32
130327952Sdim# define SI_SOLARIS32 1
131327952Sdim#else
132327952Sdim# define SI_SOLARIS32 0
133327952Sdim#endif
134327952Sdim
135327952Sdim#if SANITIZER_POSIX && !SANITIZER_MAC
136327952Sdim# define SI_POSIX_NOT_MAC 1
137327952Sdim#else
138327952Sdim# define SI_POSIX_NOT_MAC 0
139327952Sdim#endif
140327952Sdim
141321369Sdim#if SANITIZER_LINUX && !SANITIZER_FREEBSD
142321369Sdim# define SI_LINUX_NOT_FREEBSD 1
143321369Sdim# else
144321369Sdim# define SI_LINUX_NOT_FREEBSD 0
145321369Sdim#endif
146321369Sdim
147327952Sdim#define SANITIZER_INTERCEPT_STRLEN SI_NOT_FUCHSIA
148327952Sdim#define SANITIZER_INTERCEPT_STRNLEN (SI_NOT_MAC && SI_NOT_FUCHSIA)
149327952Sdim#define SANITIZER_INTERCEPT_STRCMP SI_NOT_FUCHSIA
150327952Sdim#define SANITIZER_INTERCEPT_STRSTR SI_NOT_FUCHSIA
151327952Sdim#define SANITIZER_INTERCEPT_STRCASESTR SI_POSIX
152327952Sdim#define SANITIZER_INTERCEPT_STRTOK SI_NOT_FUCHSIA
153327952Sdim#define SANITIZER_INTERCEPT_STRCHR SI_NOT_FUCHSIA
154327952Sdim#define SANITIZER_INTERCEPT_STRCHRNUL SI_POSIX_NOT_MAC
155327952Sdim#define SANITIZER_INTERCEPT_STRRCHR SI_NOT_FUCHSIA
156327952Sdim#define SANITIZER_INTERCEPT_STRSPN SI_NOT_FUCHSIA
157327952Sdim#define SANITIZER_INTERCEPT_STRPBRK SI_NOT_FUCHSIA
158327952Sdim#define SANITIZER_INTERCEPT_TEXTDOMAIN SI_LINUX_NOT_ANDROID || SI_SOLARIS
159327952Sdim#define SANITIZER_INTERCEPT_STRCASECMP SI_POSIX
160309124Sdim#define SANITIZER_INTERCEPT_MEMSET 1
161309124Sdim#define SANITIZER_INTERCEPT_MEMMOVE 1
162309124Sdim#define SANITIZER_INTERCEPT_MEMCPY 1
163327952Sdim#define SANITIZER_INTERCEPT_MEMCMP SI_NOT_FUCHSIA
164353358Sdim#define SANITIZER_INTERCEPT_BCMP \
165353358Sdim  SANITIZER_INTERCEPT_MEMCMP &&  \
166353358Sdim      ((SI_POSIX && _GNU_SOURCE) || SI_NETBSD || SI_OPENBSD || SI_FREEBSD)
167321369Sdim#define SANITIZER_INTERCEPT_STRNDUP SI_POSIX
168321369Sdim#define SANITIZER_INTERCEPT___STRNDUP SI_LINUX_NOT_FREEBSD
169321369Sdim#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
170321369Sdim    __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070
171321369Sdim# define SI_MAC_DEPLOYMENT_BELOW_10_7 1
172321369Sdim#else
173321369Sdim# define SI_MAC_DEPLOYMENT_BELOW_10_7 0
174321369Sdim#endif
175321369Sdim// memmem on Darwin doesn't exist on 10.6
176309124Sdim// FIXME: enable memmem on Windows.
177327952Sdim#define SANITIZER_INTERCEPT_MEMMEM (SI_POSIX && !SI_MAC_DEPLOYMENT_BELOW_10_7)
178327952Sdim#define SANITIZER_INTERCEPT_MEMCHR SI_NOT_FUCHSIA
179341825Sdim#define SANITIZER_INTERCEPT_MEMRCHR \
180341825Sdim  (SI_FREEBSD || SI_LINUX || SI_NETBSD || SI_OPENBSD)
181251034Sed
182327952Sdim#define SANITIZER_INTERCEPT_READ SI_POSIX
183327952Sdim#define SANITIZER_INTERCEPT_PREAD SI_POSIX
184327952Sdim#define SANITIZER_INTERCEPT_WRITE SI_POSIX
185327952Sdim#define SANITIZER_INTERCEPT_PWRITE SI_POSIX
186245614Sandrew
187327952Sdim#define SANITIZER_INTERCEPT_FREAD SI_POSIX
188327952Sdim#define SANITIZER_INTERCEPT_FWRITE SI_POSIX
189341825Sdim#define SANITIZER_INTERCEPT_FGETS SI_POSIX
190341825Sdim#define SANITIZER_INTERCEPT_FPUTS SI_POSIX
191341825Sdim#define SANITIZER_INTERCEPT_PUTS SI_POSIX
192321369Sdim
193327952Sdim#define SANITIZER_INTERCEPT_PREAD64 SI_LINUX_NOT_ANDROID || SI_SOLARIS32
194327952Sdim#define SANITIZER_INTERCEPT_PWRITE64 SI_LINUX_NOT_ANDROID || SI_SOLARIS32
195274201Sdim
196327952Sdim#define SANITIZER_INTERCEPT_READV SI_POSIX
197327952Sdim#define SANITIZER_INTERCEPT_WRITEV SI_POSIX
198274201Sdim
199321369Sdim#define SANITIZER_INTERCEPT_PREADV \
200341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID)
201274201Sdim#define SANITIZER_INTERCEPT_PWRITEV SI_LINUX_NOT_ANDROID
202274201Sdim#define SANITIZER_INTERCEPT_PREADV64 SI_LINUX_NOT_ANDROID
203274201Sdim#define SANITIZER_INTERCEPT_PWRITEV64 SI_LINUX_NOT_ANDROID
204274201Sdim
205276789Sdim#define SANITIZER_INTERCEPT_PRCTL   SI_LINUX
206245614Sandrew
207327952Sdim#define SANITIZER_INTERCEPT_LOCALTIME_AND_FRIENDS SI_POSIX
208327952Sdim#define SANITIZER_INTERCEPT_STRPTIME SI_POSIX
209251034Sed
210327952Sdim#define SANITIZER_INTERCEPT_SCANF SI_POSIX
211276789Sdim#define SANITIZER_INTERCEPT_ISOC99_SCANF SI_LINUX_NOT_ANDROID
212251034Sed
213276789Sdim#ifndef SANITIZER_INTERCEPT_PRINTF
214327952Sdim# define SANITIZER_INTERCEPT_PRINTF SI_POSIX
215321369Sdim# define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD)
216276789Sdim# define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_LINUX_NOT_ANDROID
217276789Sdim#endif
218251034Sed
219327952Sdim#define SANITIZER_INTERCEPT___PRINTF_CHK \
220327952Sdim  (SANITIZER_INTERCEPT_PRINTF && SI_LINUX_NOT_ANDROID)
221276789Sdim
222327952Sdim#define SANITIZER_INTERCEPT_FREXP SI_NOT_FUCHSIA
223327952Sdim#define SANITIZER_INTERCEPT_FREXPF_FREXPL SI_POSIX
224327952Sdim
225327952Sdim#define SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS SI_POSIX
226341825Sdim#define SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS                            \
227341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_LINUX_NOT_ANDROID || \
228341825Sdim  SI_SOLARIS)
229341825Sdim#define SANITIZER_INTERCEPT_GETPWENT                                          \
230341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_LINUX_NOT_ANDROID || \
231341825Sdim  SI_SOLARIS)
232344779Sdim#define SANITIZER_INTERCEPT_FGETGRENT_R                                       \
233344779Sdim  (SI_FREEBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
234327952Sdim#define SANITIZER_INTERCEPT_FGETPWENT SI_LINUX_NOT_ANDROID || SI_SOLARIS
235321369Sdim#define SANITIZER_INTERCEPT_GETPWENT_R \
236341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
237344779Sdim#define SANITIZER_INTERCEPT_FGETPWENT_R \
238344779Sdim  (SI_FREEBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
239327952Sdim#define SANITIZER_INTERCEPT_SETPWENT \
240327952Sdim  (SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
241327952Sdim#define SANITIZER_INTERCEPT_CLOCK_GETTIME \
242341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX || SI_SOLARIS)
243327952Sdim#define SANITIZER_INTERCEPT_GETITIMER SI_POSIX
244327952Sdim#define SANITIZER_INTERCEPT_TIME SI_POSIX
245327952Sdim#define SANITIZER_INTERCEPT_GLOB SI_LINUX_NOT_ANDROID || SI_SOLARIS
246327952Sdim#define SANITIZER_INTERCEPT_GLOB64 SI_LINUX_NOT_ANDROID
247327952Sdim#define SANITIZER_INTERCEPT_WAIT SI_POSIX
248327952Sdim#define SANITIZER_INTERCEPT_INET SI_POSIX
249341825Sdim#define SANITIZER_INTERCEPT_PTHREAD_GETSCHEDPARAM (SI_POSIX && !SI_OPENBSD)
250327952Sdim#define SANITIZER_INTERCEPT_GETADDRINFO SI_POSIX
251327952Sdim#define SANITIZER_INTERCEPT_GETNAMEINFO SI_POSIX
252327952Sdim#define SANITIZER_INTERCEPT_GETSOCKNAME SI_POSIX
253327952Sdim#define SANITIZER_INTERCEPT_GETHOSTBYNAME SI_POSIX
254327952Sdim#define SANITIZER_INTERCEPT_GETHOSTBYNAME2 SI_POSIX && !SI_SOLARIS
255327952Sdim#define SANITIZER_INTERCEPT_GETHOSTBYNAME_R \
256327952Sdim  (SI_FREEBSD || SI_LINUX || SI_SOLARIS)
257321369Sdim#define SANITIZER_INTERCEPT_GETHOSTBYNAME2_R \
258321369Sdim  (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
259327952Sdim#define SANITIZER_INTERCEPT_GETHOSTBYADDR_R \
260327952Sdim  (SI_FREEBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
261327952Sdim#define SANITIZER_INTERCEPT_GETHOSTENT_R \
262327952Sdim  (SI_FREEBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
263327952Sdim#define SANITIZER_INTERCEPT_GETSOCKOPT SI_POSIX
264327952Sdim#define SANITIZER_INTERCEPT_ACCEPT SI_POSIX
265341825Sdim#define SANITIZER_INTERCEPT_ACCEPT4 \
266341825Sdim  (SI_LINUX_NOT_ANDROID || SI_NETBSD || SI_OPENBSD)
267341825Sdim#define SANITIZER_INTERCEPT_PACCEPT SI_NETBSD
268327952Sdim#define SANITIZER_INTERCEPT_MODF SI_POSIX
269327952Sdim#define SANITIZER_INTERCEPT_RECVMSG SI_POSIX
270327952Sdim#define SANITIZER_INTERCEPT_SENDMSG SI_POSIX
271341825Sdim#define SANITIZER_INTERCEPT_RECVMMSG SI_LINUX
272341825Sdim#define SANITIZER_INTERCEPT_SENDMMSG SI_LINUX
273327952Sdim#define SANITIZER_INTERCEPT_GETPEERNAME SI_POSIX
274327952Sdim#define SANITIZER_INTERCEPT_IOCTL SI_POSIX
275327952Sdim#define SANITIZER_INTERCEPT_INET_ATON SI_POSIX
276276789Sdim#define SANITIZER_INTERCEPT_SYSINFO SI_LINUX
277327952Sdim#define SANITIZER_INTERCEPT_READDIR SI_POSIX
278327952Sdim#define SANITIZER_INTERCEPT_READDIR64 SI_LINUX_NOT_ANDROID || SI_SOLARIS32
279309124Sdim#if SI_LINUX_NOT_ANDROID && \
280288943Sdim  (defined(__i386) || defined(__x86_64) || defined(__mips64) || \
281309124Sdim    defined(__powerpc64__) || defined(__aarch64__) || defined(__arm__) || \
282309124Sdim    defined(__s390__))
283309124Sdim#define SANITIZER_INTERCEPT_PTRACE 1
284309124Sdim#else
285309124Sdim#define SANITIZER_INTERCEPT_PTRACE 0
286309124Sdim#endif
287327952Sdim#define SANITIZER_INTERCEPT_SETLOCALE SI_POSIX
288327952Sdim#define SANITIZER_INTERCEPT_GETCWD SI_POSIX
289276789Sdim#define SANITIZER_INTERCEPT_GET_CURRENT_DIR_NAME SI_LINUX_NOT_ANDROID
290327952Sdim#define SANITIZER_INTERCEPT_STRTOIMAX SI_POSIX
291327952Sdim#define SANITIZER_INTERCEPT_MBSTOWCS SI_POSIX
292327952Sdim#define SANITIZER_INTERCEPT_MBSNRTOWCS \
293327952Sdim  (SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
294327952Sdim#define SANITIZER_INTERCEPT_WCSTOMBS SI_POSIX
295341825Sdim#define SANITIZER_INTERCEPT_STRXFRM SI_POSIX
296341825Sdim#define SANITIZER_INTERCEPT___STRXFRM_L SI_LINUX
297341825Sdim#define SANITIZER_INTERCEPT_WCSXFRM SI_POSIX
298341825Sdim#define SANITIZER_INTERCEPT___WCSXFRM_L SI_LINUX
299341825Sdim#define SANITIZER_INTERCEPT_WCSNRTOMBS                                        \
300341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_LINUX_NOT_ANDROID || \
301341825Sdim  SI_SOLARIS)
302341825Sdim#define SANITIZER_INTERCEPT_WCRTOMB                                           \
303341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_LINUX_NOT_ANDROID || \
304341825Sdim  SI_SOLARIS)
305353358Sdim#define SANITIZER_INTERCEPT_WCTOMB                                           \
306353358Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_LINUX_NOT_ANDROID || \
307353358Sdim  SI_SOLARIS)
308327952Sdim#define SANITIZER_INTERCEPT_TCGETATTR SI_LINUX_NOT_ANDROID || SI_SOLARIS
309327952Sdim#define SANITIZER_INTERCEPT_REALPATH SI_POSIX
310327952Sdim#define SANITIZER_INTERCEPT_CANONICALIZE_FILE_NAME \
311327952Sdim  (SI_LINUX_NOT_ANDROID || SI_SOLARIS)
312341825Sdim#define SANITIZER_INTERCEPT_CONFSTR                                           \
313341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_LINUX_NOT_ANDROID || \
314341825Sdim  SI_SOLARIS)
315276789Sdim#define SANITIZER_INTERCEPT_SCHED_GETAFFINITY SI_LINUX_NOT_ANDROID
316327952Sdim#define SANITIZER_INTERCEPT_SCHED_GETPARAM SI_LINUX_NOT_ANDROID || SI_SOLARIS
317327952Sdim#define SANITIZER_INTERCEPT_STRERROR SI_POSIX
318327952Sdim#define SANITIZER_INTERCEPT_STRERROR_R SI_POSIX
319276789Sdim#define SANITIZER_INTERCEPT_XPG_STRERROR_R SI_LINUX_NOT_ANDROID
320288943Sdim#define SANITIZER_INTERCEPT_SCANDIR \
321341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
322327952Sdim#define SANITIZER_INTERCEPT_SCANDIR64 SI_LINUX_NOT_ANDROID || SI_SOLARIS32
323327952Sdim#define SANITIZER_INTERCEPT_GETGROUPS SI_POSIX
324327952Sdim#define SANITIZER_INTERCEPT_POLL SI_POSIX
325327952Sdim#define SANITIZER_INTERCEPT_PPOLL SI_LINUX_NOT_ANDROID || SI_SOLARIS
326280031Sdim#define SANITIZER_INTERCEPT_WORDEXP \
327327952Sdim  (SI_FREEBSD || SI_NETBSD || (SI_MAC && !SI_IOS) || SI_LINUX_NOT_ANDROID || \
328327952Sdim    SI_SOLARIS)
329327952Sdim#define SANITIZER_INTERCEPT_SIGWAIT SI_POSIX
330327952Sdim#define SANITIZER_INTERCEPT_SIGWAITINFO SI_LINUX_NOT_ANDROID || SI_SOLARIS
331327952Sdim#define SANITIZER_INTERCEPT_SIGTIMEDWAIT SI_LINUX_NOT_ANDROID || SI_SOLARIS
332276789Sdim#define SANITIZER_INTERCEPT_SIGSETOPS \
333327952Sdim  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
334327952Sdim#define SANITIZER_INTERCEPT_SIGPENDING SI_POSIX
335327952Sdim#define SANITIZER_INTERCEPT_SIGPROCMASK SI_POSIX
336353358Sdim#define SANITIZER_INTERCEPT_PTHREAD_SIGMASK SI_POSIX
337321369Sdim#define SANITIZER_INTERCEPT_BACKTRACE \
338341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
339276789Sdim#define SANITIZER_INTERCEPT_GETMNTENT SI_LINUX
340276789Sdim#define SANITIZER_INTERCEPT_GETMNTENT_R SI_LINUX_NOT_ANDROID
341321369Sdim#define SANITIZER_INTERCEPT_STATFS \
342327952Sdim  (SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
343276789Sdim#define SANITIZER_INTERCEPT_STATFS64 \
344321369Sdim  ((SI_MAC && !SI_IOS) || SI_LINUX_NOT_ANDROID)
345321369Sdim#define SANITIZER_INTERCEPT_STATVFS \
346341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID)
347276789Sdim#define SANITIZER_INTERCEPT_STATVFS64 SI_LINUX_NOT_ANDROID
348327952Sdim#define SANITIZER_INTERCEPT_INITGROUPS SI_POSIX
349341825Sdim#define SANITIZER_INTERCEPT_ETHER_NTOA_ATON (SI_POSIX && !SI_OPENBSD)
350280031Sdim#define SANITIZER_INTERCEPT_ETHER_HOST \
351321369Sdim  (SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
352321369Sdim#define SANITIZER_INTERCEPT_ETHER_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
353360784Sdim#define SANITIZER_INTERCEPT_SHMCTL                                       \
354360784Sdim  (((SI_FREEBSD || SI_LINUX_NOT_ANDROID) && SANITIZER_WORDSIZE == 64) || \
355360784Sdim   SI_NETBSD || SI_OPENBSD || SI_SOLARIS)  // NOLINT
356276789Sdim#define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID
357327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_POSIX
358276789Sdim#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED \
359327952Sdim  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
360276789Sdim#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP SI_LINUX_NOT_ANDROID
361341825Sdim#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET_SCHED (SI_POSIX && !SI_OPENBSD)
362327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPSHARED \
363341825Sdim  (SI_POSIX && !SI_NETBSD && !SI_OPENBSD)
364341825Sdim#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETTYPE (SI_POSIX && !SI_OPENBSD)
365276789Sdim#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPROTOCOL \
366327952Sdim  (SI_MAC || SI_NETBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
367276789Sdim#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPRIOCEILING \
368327952Sdim  (SI_MAC || SI_NETBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
369327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST \
370327952Sdim  (SI_LINUX_NOT_ANDROID || SI_SOLARIS)
371276789Sdim#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST_NP SI_LINUX_NOT_ANDROID
372327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_RWLOCKATTR_GETPSHARED \
373341825Sdim  (SI_POSIX && !SI_NETBSD && !SI_OPENBSD)
374276789Sdim#define SANITIZER_INTERCEPT_PTHREAD_RWLOCKATTR_GETKIND_NP SI_LINUX_NOT_ANDROID
375327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_CONDATTR_GETPSHARED \
376341825Sdim  (SI_POSIX && !SI_NETBSD && !SI_OPENBSD)
377327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_CONDATTR_GETCLOCK \
378327952Sdim  (SI_LINUX_NOT_ANDROID || SI_SOLARIS)
379327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_BARRIERATTR_GETPSHARED \
380341825Sdim  (SI_LINUX_NOT_ANDROID && !SI_NETBSD && !SI_OPENBSD)
381341825Sdim#define SANITIZER_INTERCEPT_THR_EXIT SI_FREEBSD
382327952Sdim#define SANITIZER_INTERCEPT_TMPNAM SI_POSIX
383327952Sdim#define SANITIZER_INTERCEPT_TMPNAM_R SI_LINUX_NOT_ANDROID || SI_SOLARIS
384353358Sdim#define SANITIZER_INTERCEPT_TTYNAME SI_POSIX
385327952Sdim#define SANITIZER_INTERCEPT_TTYNAME_R SI_POSIX
386327952Sdim#define SANITIZER_INTERCEPT_TEMPNAM SI_POSIX
387327952Sdim#define SANITIZER_INTERCEPT_SINCOS SI_LINUX || SI_SOLARIS
388327952Sdim#define SANITIZER_INTERCEPT_REMQUO SI_POSIX
389344779Sdim#define SANITIZER_INTERCEPT_REMQUOL (SI_POSIX && !SI_NETBSD)
390327952Sdim#define SANITIZER_INTERCEPT_LGAMMA SI_POSIX
391344779Sdim#define SANITIZER_INTERCEPT_LGAMMAL (SI_POSIX && !SI_NETBSD)
392327952Sdim#define SANITIZER_INTERCEPT_LGAMMA_R (SI_FREEBSD || SI_LINUX || SI_SOLARIS)
393327952Sdim#define SANITIZER_INTERCEPT_LGAMMAL_R SI_LINUX_NOT_ANDROID || SI_SOLARIS
394276789Sdim#define SANITIZER_INTERCEPT_DRAND48_R SI_LINUX_NOT_ANDROID
395341825Sdim#define SANITIZER_INTERCEPT_RAND_R                                            \
396341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_LINUX_NOT_ANDROID || \
397341825Sdim  SI_SOLARIS)
398321369Sdim#define SANITIZER_INTERCEPT_ICONV \
399341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
400327952Sdim#define SANITIZER_INTERCEPT_TIMES SI_POSIX
401251034Sed
402274201Sdim// FIXME: getline seems to be available on OSX 10.7
403321369Sdim#define SANITIZER_INTERCEPT_GETLINE \
404341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
405274201Sdim
406321369Sdim#define SANITIZER_INTERCEPT__EXIT \
407341825Sdim  (SI_LINUX || SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_MAC || SI_SOLARIS)
408274201Sdim
409341825Sdim#define SANITIZER_INTERCEPT_PTHREAD_MUTEX SI_POSIX
410341825Sdim#define SANITIZER_INTERCEPT___PTHREAD_MUTEX SI_LINUX_NOT_ANDROID
411341825Sdim#define SANITIZER_INTERCEPT___LIBC_MUTEX SI_NETBSD
412276789Sdim#define SANITIZER_INTERCEPT_PTHREAD_SETNAME_NP \
413341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
414327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_GETNAME_NP \
415344779Sdim  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
416274201Sdim
417276789Sdim#define SANITIZER_INTERCEPT_TLS_GET_ADDR \
418341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
419276789Sdim
420276789Sdim#define SANITIZER_INTERCEPT_LISTXATTR SI_LINUX
421276789Sdim#define SANITIZER_INTERCEPT_GETXATTR SI_LINUX
422276789Sdim#define SANITIZER_INTERCEPT_GETRESID SI_LINUX
423341825Sdim#define SANITIZER_INTERCEPT_GETIFADDRS                                        \
424341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_MAC || \
425341825Sdim  SI_SOLARIS)
426341825Sdim#define SANITIZER_INTERCEPT_IF_INDEXTONAME                                    \
427341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_MAC || \
428341825Sdim  SI_SOLARIS)
429276789Sdim#define SANITIZER_INTERCEPT_CAPGET SI_LINUX_NOT_ANDROID
430309124Sdim#if SI_LINUX && defined(__arm__)
431309124Sdim#define SANITIZER_INTERCEPT_AEABI_MEM 1
432309124Sdim#else
433309124Sdim#define SANITIZER_INTERCEPT_AEABI_MEM 0
434309124Sdim#endif
435353358Sdim#define SANITIZER_INTERCEPT___BZERO SI_MAC || SI_LINUX_NOT_ANDROID
436353358Sdim#define SANITIZER_INTERCEPT_BZERO SI_LINUX_NOT_ANDROID
437341825Sdim#define SANITIZER_INTERCEPT_FTIME \
438341825Sdim  (!SI_FREEBSD && !SI_NETBSD && !SI_OPENBSD && SI_POSIX)
439327952Sdim#define SANITIZER_INTERCEPT_XDR SI_LINUX_NOT_ANDROID || SI_SOLARIS
440321369Sdim#define SANITIZER_INTERCEPT_TSEARCH \
441341825Sdim  (SI_LINUX_NOT_ANDROID || SI_MAC || SI_NETBSD || SI_OPENBSD || SI_SOLARIS)
442276789Sdim#define SANITIZER_INTERCEPT_LIBIO_INTERNALS SI_LINUX_NOT_ANDROID
443327952Sdim#define SANITIZER_INTERCEPT_FOPEN SI_POSIX
444327952Sdim#define SANITIZER_INTERCEPT_FOPEN64 SI_LINUX_NOT_ANDROID || SI_SOLARIS32
445327952Sdim#define SANITIZER_INTERCEPT_OPEN_MEMSTREAM \
446341825Sdim  (SI_LINUX_NOT_ANDROID || SI_NETBSD || SI_OPENBSD || SI_SOLARIS)
447276789Sdim#define SANITIZER_INTERCEPT_OBSTACK SI_LINUX_NOT_ANDROID
448327952Sdim#define SANITIZER_INTERCEPT_FFLUSH SI_POSIX
449327952Sdim#define SANITIZER_INTERCEPT_FCLOSE SI_POSIX
450309124Sdim
451309124Sdim#ifndef SANITIZER_INTERCEPT_DLOPEN_DLCLOSE
452341825Sdim#define SANITIZER_INTERCEPT_DLOPEN_DLCLOSE                                    \
453341825Sdim  (SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_LINUX_NOT_ANDROID || SI_MAC || \
454341825Sdim  SI_SOLARIS)
455309124Sdim#endif
456309124Sdim
457321369Sdim#define SANITIZER_INTERCEPT_GETPASS \
458341825Sdim  (SI_LINUX_NOT_ANDROID || SI_MAC || SI_NETBSD || SI_OPENBSD)
459276789Sdim#define SANITIZER_INTERCEPT_TIMERFD SI_LINUX_NOT_ANDROID
460276789Sdim
461327952Sdim#define SANITIZER_INTERCEPT_MLOCKX SI_POSIX
462288943Sdim#define SANITIZER_INTERCEPT_FOPENCOOKIE SI_LINUX_NOT_ANDROID
463327952Sdim#define SANITIZER_INTERCEPT_SEM \
464327952Sdim  (SI_LINUX || SI_FREEBSD || SI_NETBSD || SI_SOLARIS)
465327952Sdim#define SANITIZER_INTERCEPT_PTHREAD_SETCANCEL SI_POSIX
466341825Sdim#define SANITIZER_INTERCEPT_MINCORE \
467341825Sdim  (SI_LINUX || SI_NETBSD || SI_OPENBSD || SI_SOLARIS)
468296417Sdim#define SANITIZER_INTERCEPT_PROCESS_VM_READV SI_LINUX
469321369Sdim#define SANITIZER_INTERCEPT_CTERMID \
470341825Sdim  (SI_LINUX || SI_MAC || SI_FREEBSD || SI_NETBSD || SI_OPENBSD || SI_SOLARIS)
471327952Sdim#define SANITIZER_INTERCEPT_CTERMID_R (SI_MAC || SI_FREEBSD || SI_SOLARIS)
472276789Sdim
473341825Sdim#define SANITIZER_INTERCEPTOR_HOOKS \
474341825Sdim  (SI_LINUX || SI_MAC || SI_WINDOWS || SI_NETBSD)
475327952Sdim#define SANITIZER_INTERCEPT_RECV_RECVFROM SI_POSIX
476327952Sdim#define SANITIZER_INTERCEPT_SEND_SENDTO SI_POSIX
477309124Sdim#define SANITIZER_INTERCEPT_EVENTFD_READ_WRITE SI_LINUX
478296417Sdim
479321369Sdim#define SANITIZER_INTERCEPT_STAT \
480341825Sdim  (SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_OPENBSD || SI_SOLARIS)
481341825Sdim#define SANITIZER_INTERCEPT_LSTAT (SI_NETBSD || SI_FREEBSD)
482327952Sdim#define SANITIZER_INTERCEPT___XSTAT (!SANITIZER_INTERCEPT_STAT && SI_POSIX)
483309124Sdim#define SANITIZER_INTERCEPT___XSTAT64 SI_LINUX_NOT_ANDROID
484309124Sdim#define SANITIZER_INTERCEPT___LXSTAT SANITIZER_INTERCEPT___XSTAT
485309124Sdim#define SANITIZER_INTERCEPT___LXSTAT64 SI_LINUX_NOT_ANDROID
486313052Sdim
487327952Sdim#define SANITIZER_INTERCEPT_UTMP \
488327952Sdim  (SI_POSIX && !SI_MAC && !SI_FREEBSD && !SI_NETBSD)
489327952Sdim#define SANITIZER_INTERCEPT_UTMPX \
490327952Sdim  (SI_LINUX_NOT_ANDROID || SI_MAC || SI_FREEBSD || SI_NETBSD)
491314564Sdim
492321369Sdim#define SANITIZER_INTERCEPT_GETLOADAVG \
493341825Sdim  (SI_LINUX_NOT_ANDROID || SI_MAC || SI_FREEBSD || SI_NETBSD || SI_OPENBSD)
494313052Sdim
495341825Sdim#define SANITIZER_INTERCEPT_MMAP SI_POSIX
496341825Sdim#define SANITIZER_INTERCEPT_MMAP64 SI_LINUX_NOT_ANDROID
497321369Sdim#define SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO \
498341825Sdim  (!SI_FREEBSD && !SI_MAC && !SI_NETBSD && !SI_OPENBSD && SI_NOT_FUCHSIA && \
499341825Sdim  SI_NOT_RTEMS)
500341825Sdim#define SANITIZER_INTERCEPT_MEMALIGN \
501341825Sdim  (!SI_FREEBSD && !SI_MAC && !SI_NETBSD && !SI_OPENBSD && SI_NOT_RTEMS)
502327952Sdim#define SANITIZER_INTERCEPT_PVALLOC \
503341825Sdim  (!SI_FREEBSD && !SI_MAC && !SI_NETBSD && !SI_OPENBSD && SI_NOT_FUCHSIA && \
504341825Sdim  SI_NOT_RTEMS)
505327952Sdim#define SANITIZER_INTERCEPT_CFREE \
506341825Sdim  (!SI_FREEBSD && !SI_MAC && !SI_NETBSD && !SI_OPENBSD && SI_NOT_FUCHSIA && \
507341825Sdim  SI_NOT_RTEMS)
508353358Sdim#define SANITIZER_INTERCEPT_REALLOCARRAY SI_POSIX
509341825Sdim#define SANITIZER_INTERCEPT_ALIGNED_ALLOC (!SI_MAC && SI_NOT_RTEMS)
510360784Sdim#define SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE \
511360784Sdim  (!SI_MAC && !SI_OPENBSD && !SI_NETBSD)
512321369Sdim#define SANITIZER_INTERCEPT_MCHECK_MPROBE SI_LINUX_NOT_ANDROID
513327952Sdim#define SANITIZER_INTERCEPT_WCSCAT SI_POSIX
514353358Sdim#define SANITIZER_INTERCEPT_WCSDUP SI_POSIX
515327952Sdim#define SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION (!SI_WINDOWS && SI_NOT_FUCHSIA)
516327952Sdim#define SANITIZER_INTERCEPT_BSD_SIGNAL SI_ANDROID
517321369Sdim
518341825Sdim#define SANITIZER_INTERCEPT_ACCT (SI_NETBSD || SI_OPENBSD || SI_FREEBSD)
519341825Sdim#define SANITIZER_INTERCEPT_USER_FROM_UID SI_NETBSD
520341825Sdim#define SANITIZER_INTERCEPT_UID_FROM_USER SI_NETBSD
521341825Sdim#define SANITIZER_INTERCEPT_GROUP_FROM_GID SI_NETBSD
522341825Sdim#define SANITIZER_INTERCEPT_GID_FROM_GROUP SI_NETBSD
523341825Sdim#define SANITIZER_INTERCEPT_ACCESS (SI_NETBSD || SI_OPENBSD || SI_FREEBSD)
524341825Sdim#define SANITIZER_INTERCEPT_FACCESSAT (SI_NETBSD || SI_OPENBSD || SI_FREEBSD)
525341825Sdim#define SANITIZER_INTERCEPT_GETGROUPLIST (SI_NETBSD || SI_OPENBSD)
526341825Sdim#define SANITIZER_INTERCEPT_STRLCPY                                            \
527341825Sdim  (SI_NETBSD || SI_FREEBSD || SI_OPENBSD || SI_MAC || SI_ANDROID)
528341825Sdim
529341825Sdim#define SANITIZER_INTERCEPT_NAME_TO_HANDLE_AT SI_LINUX_NOT_ANDROID
530341825Sdim#define SANITIZER_INTERCEPT_OPEN_BY_HANDLE_AT SI_LINUX_NOT_ANDROID
531341825Sdim
532341825Sdim#define SANITIZER_INTERCEPT_READLINK SI_POSIX
533341825Sdim#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
534341825Sdim    __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101000
535341825Sdim# define SI_MAC_DEPLOYMENT_BELOW_10_10 1
536341825Sdim#else
537341825Sdim# define SI_MAC_DEPLOYMENT_BELOW_10_10 0
538341825Sdim#endif
539341825Sdim#define SANITIZER_INTERCEPT_READLINKAT \
540341825Sdim  (SI_POSIX && !SI_MAC_DEPLOYMENT_BELOW_10_10)
541341825Sdim
542341825Sdim#define SANITIZER_INTERCEPT_DEVNAME (SI_NETBSD || SI_OPENBSD || SI_FREEBSD)
543341825Sdim#define SANITIZER_INTERCEPT_DEVNAME_R (SI_NETBSD || SI_FREEBSD)
544341825Sdim#define SANITIZER_INTERCEPT_FGETLN (SI_NETBSD || SI_FREEBSD)
545341825Sdim#define SANITIZER_INTERCEPT_STRMODE (SI_NETBSD || SI_FREEBSD)
546341825Sdim#define SANITIZER_INTERCEPT_TTYENT SI_NETBSD
547341825Sdim#define SANITIZER_INTERCEPT_PROTOENT SI_NETBSD
548341825Sdim#define SANITIZER_INTERCEPT_NETENT SI_NETBSD
549344779Sdim#define SANITIZER_INTERCEPT_SETVBUF (SI_NETBSD || SI_FREEBSD || \
550344779Sdim  SI_LINUX || SI_MAC)
551344779Sdim#define SANITIZER_INTERCEPT_GETMNTINFO (SI_NETBSD || SI_FREEBSD || SI_MAC)
552344779Sdim#define SANITIZER_INTERCEPT_MI_VECTOR_HASH SI_NETBSD
553344779Sdim#define SANITIZER_INTERCEPT_GETVFSSTAT SI_NETBSD
554344779Sdim#define SANITIZER_INTERCEPT_REGEX (SI_NETBSD || SI_FREEBSD || SI_LINUX)
555344779Sdim#define SANITIZER_INTERCEPT_REGEXSUB SI_NETBSD
556344779Sdim#define SANITIZER_INTERCEPT_FTS (SI_NETBSD || SI_FREEBSD)
557344779Sdim#define SANITIZER_INTERCEPT_SYSCTL (SI_NETBSD || SI_FREEBSD || SI_MAC)
558344779Sdim#define SANITIZER_INTERCEPT_ASYSCTL SI_NETBSD
559344779Sdim#define SANITIZER_INTERCEPT_SYSCTLGETMIBINFO SI_NETBSD
560344779Sdim#define SANITIZER_INTERCEPT_NL_LANGINFO (SI_NETBSD || SI_FREEBSD || SI_MAC)
561344779Sdim#define SANITIZER_INTERCEPT_MODCTL SI_NETBSD
562344779Sdim#define SANITIZER_INTERCEPT_CAPSICUM SI_FREEBSD
563344779Sdim#define SANITIZER_INTERCEPT_STRTONUM (SI_NETBSD || SI_FREEBSD)
564344779Sdim#define SANITIZER_INTERCEPT_FPARSELN SI_NETBSD
565344779Sdim#define SANITIZER_INTERCEPT_STATVFS1 SI_NETBSD
566344779Sdim#define SANITIZER_INTERCEPT_STRTOI SI_NETBSD
567344779Sdim#define SANITIZER_INTERCEPT_CAPSICUM SI_FREEBSD
568344779Sdim#define SANITIZER_INTERCEPT_SHA1 SI_NETBSD
569344779Sdim#define SANITIZER_INTERCEPT_MD4 SI_NETBSD
570344779Sdim#define SANITIZER_INTERCEPT_RMD160 SI_NETBSD
571344779Sdim#define SANITIZER_INTERCEPT_MD5 SI_NETBSD
572344779Sdim#define SANITIZER_INTERCEPT_FSEEK (SI_NETBSD || SI_FREEBSD)
573344779Sdim#define SANITIZER_INTERCEPT_MD2 SI_NETBSD
574344779Sdim#define SANITIZER_INTERCEPT_SHA2 SI_NETBSD
575344779Sdim#define SANITIZER_INTERCEPT_CDB SI_NETBSD
576344779Sdim#define SANITIZER_INTERCEPT_VIS (SI_NETBSD || SI_FREEBSD)
577344779Sdim#define SANITIZER_INTERCEPT_POPEN SI_POSIX
578344779Sdim#define SANITIZER_INTERCEPT_POPENVE SI_NETBSD
579344779Sdim#define SANITIZER_INTERCEPT_PCLOSE SI_POSIX
580344779Sdim#define SANITIZER_INTERCEPT_FUNOPEN (SI_NETBSD || SI_FREEBSD)
581344779Sdim#define SANITIZER_INTERCEPT_FUNOPEN2 SI_NETBSD
582344779Sdim#define SANITIZER_INTERCEPT_GETFSENT (SI_FREEBSD || SI_NETBSD || SI_MAC)
583360784Sdim#define SANITIZER_INTERCEPT_ARC4RANDOM (SI_FREEBSD || SI_NETBSD || SI_MAC)
584344779Sdim#define SANITIZER_INTERCEPT_FDEVNAME SI_FREEBSD
585360784Sdim#define SANITIZER_INTERCEPT_GETUSERSHELL (SI_POSIX && !SI_ANDROID)
586344779Sdim#define SANITIZER_INTERCEPT_SL_INIT (SI_FREEBSD || SI_NETBSD)
587360784Sdim#define SANITIZER_INTERCEPT_CRYPT (SI_POSIX && !SI_ANDROID)
588360784Sdim#define SANITIZER_INTERCEPT_CRYPT_R (SI_LINUX && !SI_ANDROID)
589341825Sdim
590360784Sdim#define SANITIZER_INTERCEPT_GETRANDOM \
591360784Sdim  ((SI_LINUX && __GLIBC_PREREQ(2, 25)) || SI_FREEBSD)
592360784Sdim#define SANITIZER_INTERCEPT___CXA_ATEXIT SI_NETBSD
593360784Sdim#define SANITIZER_INTERCEPT_ATEXIT SI_NETBSD
594360784Sdim#define SANITIZER_INTERCEPT_PTHREAD_ATFORK SI_NETBSD
595360784Sdim#define SANITIZER_INTERCEPT_GETENTROPY SI_FREEBSD
596360784Sdim#define SANITIZER_INTERCEPT_QSORT \
597360784Sdim  (SI_POSIX && !SI_IOSSIM && !SI_WATCHOS && !SI_TVOS)
598360784Sdim#define SANITIZER_INTERCEPT_QSORT_R (SI_LINUX && !SI_ANDROID)
599360784Sdim
600251034Sed#endif  // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H
601