blob: c2a432a639a95bd481e0f8dfe0e64935bb0def92 [file] [log] [blame]
Alexey Samsonov74737d52012-12-13 08:50:16 +00001//===-- sanitizer_platform_interceptors.h -----------------------*- C++ -*-===//
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 defines macro telling whether sanitizer tools can/should intercept
11// given library functions on a given platform.
12//
13//===----------------------------------------------------------------------===//
Dmitry Vyukovedd28212013-04-24 11:06:05 +000014#ifndef SANITIZER_PLATFORM_INTERCEPTORS_H
15#define SANITIZER_PLATFORM_INTERCEPTORS_H
Alexey Samsonov74737d52012-12-13 08:50:16 +000016
17#include "sanitizer_internal_defs.h"
18
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000019#if !SANITIZER_WINDOWS
Kostya Serebryanyc20b3212013-01-18 06:43:13 +000020# define SI_NOT_WINDOWS 1
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000021# include "sanitizer_platform_limits_posix.h"
Alexey Samsonov74737d52012-12-13 08:50:16 +000022#else
Kostya Serebryanyc20b3212013-01-18 06:43:13 +000023# define SI_NOT_WINDOWS 0
Alexey Samsonov74737d52012-12-13 08:50:16 +000024#endif
25
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000026#if SANITIZER_LINUX && !SANITIZER_ANDROID
Kostya Serebryanyc20b3212013-01-18 06:43:13 +000027# define SI_LINUX_NOT_ANDROID 1
Alexey Samsonov74737d52012-12-13 08:50:16 +000028#else
Kostya Serebryanyc20b3212013-01-18 06:43:13 +000029# define SI_LINUX_NOT_ANDROID 0
Alexey Samsonov74737d52012-12-13 08:50:16 +000030#endif
31
Evgeniy Stepanov24e13722013-03-19 14:33:38 +000032#if SANITIZER_LINUX
Alexander Potapenko9eab8582013-02-20 15:27:58 +000033# define SI_LINUX 1
34#else
35# define SI_LINUX 0
36#endif
37
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000038#if SANITIZER_MAC
39# define SI_MAC 1
40#else
41# define SI_MAC 0
42#endif
43
Alexey Samsonov67505a82013-07-16 12:51:53 +000044# define SANITIZER_INTERCEPT_STRCMP 1
Evgeniy Stepanovf4954792013-05-21 09:01:23 +000045# define SANITIZER_INTERCEPT_STRCASECMP SI_NOT_WINDOWS
46
Kostya Serebryanyc20b3212013-01-18 06:43:13 +000047# define SANITIZER_INTERCEPT_READ SI_NOT_WINDOWS
48# define SANITIZER_INTERCEPT_PREAD SI_NOT_WINDOWS
49# define SANITIZER_INTERCEPT_WRITE SI_NOT_WINDOWS
50# define SANITIZER_INTERCEPT_PWRITE SI_NOT_WINDOWS
51
Evgeniy Stepanovb916e6a2013-06-24 10:43:23 +000052#define SANITIZER_INTERCEPT_PREAD64 SI_LINUX_NOT_ANDROID
53#define SANITIZER_INTERCEPT_PWRITE64 SI_LINUX_NOT_ANDROID
54
55#define SANITIZER_INTERCEPT_READV SI_NOT_WINDOWS
56#define SANITIZER_INTERCEPT_WRITEV SI_NOT_WINDOWS
57
58#define SANITIZER_INTERCEPT_PREADV SI_LINUX_NOT_ANDROID
59#define SANITIZER_INTERCEPT_PWRITEV SI_LINUX_NOT_ANDROID
60#define SANITIZER_INTERCEPT_PREADV64 SI_LINUX_NOT_ANDROID
61#define SANITIZER_INTERCEPT_PWRITEV64 SI_LINUX_NOT_ANDROID
62
Evgeniy Stepanova5480592013-03-20 07:35:52 +000063# define SANITIZER_INTERCEPT_PRCTL SI_LINUX
Kostya Serebryanyc20b3212013-01-18 06:43:13 +000064
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000065# define SANITIZER_INTERCEPT_LOCALTIME_AND_FRIENDS SI_NOT_WINDOWS
66
Evgeniy Stepanov5fffb9f2013-01-21 13:30:08 +000067# define SANITIZER_INTERCEPT_SCANF SI_NOT_WINDOWS
Alexander Potapenko9eab8582013-02-20 15:27:58 +000068# define SANITIZER_INTERCEPT_ISOC99_SCANF SI_LINUX
Evgeniy Stepanov7cbbb292013-03-14 11:34:39 +000069
70# define SANITIZER_INTERCEPT_FREXP 1
Alexey Samsonovff5d1fc2013-03-15 14:02:21 +000071# define SANITIZER_INTERCEPT_FREXPF_FREXPL SI_NOT_WINDOWS
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000072
Evgeniy Stepanov103a63e2013-04-23 12:01:20 +000073# define SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS SI_NOT_WINDOWS
74# define SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS \
Alexey Samsonov82185842013-04-03 08:26:03 +000075 SI_MAC || SI_LINUX_NOT_ANDROID
Evgeniy Stepanove4bdda52013-04-01 14:47:21 +000076# define SANITIZER_INTERCEPT_CLOCK_GETTIME SI_LINUX
77# define SANITIZER_INTERCEPT_GETITIMER SI_NOT_WINDOWS
Evgeniy Stepanovfef66052013-04-08 08:25:22 +000078# define SANITIZER_INTERCEPT_TIME SI_NOT_WINDOWS
Evgeniy Stepanova1c2a552013-04-09 11:35:13 +000079# define SANITIZER_INTERCEPT_GLOB SI_LINUX_NOT_ANDROID
Evgeniy Stepanov897a4ae2013-04-09 14:34:59 +000080# define SANITIZER_INTERCEPT_WAIT SI_NOT_WINDOWS
Evgeniy Stepanov9530eb72013-04-23 14:05:15 +000081# define SANITIZER_INTERCEPT_INET SI_NOT_WINDOWS
Evgeniy Stepanovf4954792013-05-21 09:01:23 +000082# define SANITIZER_INTERCEPT_PTHREAD_GETSCHEDPARAM SI_NOT_WINDOWS
Evgeniy Stepanov447ef192013-05-22 12:50:26 +000083# define SANITIZER_INTERCEPT_GETADDRINFO SI_NOT_WINDOWS
Evgeniy Stepanov9eedf482013-07-01 13:51:31 +000084# define SANITIZER_INTERCEPT_GETNAMEINFO SI_NOT_WINDOWS
Evgeniy Stepanov9f58c5c2013-05-22 13:46:22 +000085# define SANITIZER_INTERCEPT_GETSOCKNAME SI_NOT_WINDOWS
Evgeniy Stepanov0a2cc372013-05-23 11:10:23 +000086# define SANITIZER_INTERCEPT_GETHOSTBYNAME SI_NOT_WINDOWS
87# define SANITIZER_INTERCEPT_GETHOSTBYNAME_R SI_LINUX
Evgeniy Stepanovf32be422013-05-23 11:38:08 +000088# define SANITIZER_INTERCEPT_GETSOCKOPT SI_NOT_WINDOWS
Evgeniy Stepanov9d1525e2013-05-29 09:09:58 +000089# define SANITIZER_INTERCEPT_ACCEPT SI_NOT_WINDOWS
90# define SANITIZER_INTERCEPT_ACCEPT4 SI_LINUX
Evgeniy Stepanovc87088b2013-05-29 10:03:11 +000091# define SANITIZER_INTERCEPT_MODF SI_NOT_WINDOWS
Evgeniy Stepanov9666d892013-05-29 11:30:00 +000092# define SANITIZER_INTERCEPT_RECVMSG SI_NOT_WINDOWS
Evgeniy Stepanovbc33e132013-05-29 11:49:25 +000093# define SANITIZER_INTERCEPT_GETPEERNAME SI_NOT_WINDOWS
Evgeniy Stepanov745dd0d2013-06-07 13:00:47 +000094# define SANITIZER_INTERCEPT_IOCTL SI_NOT_WINDOWS
Evgeniy Stepanov9d600872013-06-24 13:56:14 +000095# define SANITIZER_INTERCEPT_INET_ATON SI_NOT_WINDOWS
Evgeniy Stepanov359d7fc2013-06-24 14:25:33 +000096# define SANITIZER_INTERCEPT_SYSINFO SI_LINUX
Evgeniy Stepanovb5cf98f2013-06-26 15:00:53 +000097# define SANITIZER_INTERCEPT_READDIR SI_NOT_WINDOWS
98# define SANITIZER_INTERCEPT_READDIR64 SI_LINUX_NOT_ANDROID
Evgeniy Stepanov22d87672013-07-05 08:57:47 +000099# define SANITIZER_INTERCEPT_PTRACE SI_LINUX_NOT_ANDROID && \
Timur Iskhodzhanoveaca82c2013-07-15 16:11:39 +0000100 (defined(__i386) || defined (__x86_64)) // NOLINT
Evgeniy Stepanov3cae6042013-07-02 09:23:45 +0000101# define SANITIZER_INTERCEPT_SETLOCALE SI_NOT_WINDOWS
Evgeniy Stepanov80144892013-07-02 13:34:44 +0000102# define SANITIZER_INTERCEPT_GETCWD SI_NOT_WINDOWS
103# define SANITIZER_INTERCEPT_GET_CURRENT_DIR_NAME SI_LINUX
Evgeniy Stepanovff6c9fb2013-07-04 13:19:41 +0000104# define SANITIZER_INTERCEPT_STRTOIMAX SI_NOT_WINDOWS
105# define SANITIZER_INTERCEPT_MBSTOWCS SI_NOT_WINDOWS
106# define SANITIZER_INTERCEPT_MBSNRTOWCS SI_MAC || SI_LINUX_NOT_ANDROID
107# define SANITIZER_INTERCEPT_WCSTOMBS SI_NOT_WINDOWS
108# define SANITIZER_INTERCEPT_WCSNRTOMBS SI_MAC || SI_LINUX_NOT_ANDROID
Evgeniy Stepanovea727682013-07-04 14:03:31 +0000109# define SANITIZER_INTERCEPT_TCGETATTR SI_LINUX
Evgeniy Stepanov12eb79d2013-07-09 09:53:37 +0000110# define SANITIZER_INTERCEPT_REALPATH SI_NOT_WINDOWS
111# define SANITIZER_INTERCEPT_CANONICALIZE_FILE_NAME SI_LINUX_NOT_ANDROID
Evgeniy Stepanov5ec19bc2013-07-30 12:46:59 +0000112# define SANITIZER_INTERCEPT_CONFSTR SI_MAC || SI_LINUX_NOT_ANDROID
Evgeniy Stepanov84ba74c2013-08-07 09:10:16 +0000113# define SANITIZER_INTERCEPT_SCHED_GETAFFINITY SI_LINUX_NOT_ANDROID
Evgeniy Stepanov12049792013-08-08 11:44:05 +0000114# define SANITIZER_INTERCEPT_STRERROR SI_NOT_WINDOWS
115# define SANITIZER_INTERCEPT_STRERROR_R SI_NOT_WINDOWS
Evgeniy Stepanov8283cce2013-08-08 14:04:36 +0000116# define SANITIZER_INTERCEPT_SCANDIR SI_LINUX_NOT_ANDROID
Evgeniy Stepanov224226c2013-08-08 13:57:15 +0000117# define SANITIZER_INTERCEPT_SCANDIR64 SI_LINUX_NOT_ANDROID
Evgeniy Stepanovedff34b2013-08-12 11:01:40 +0000118# define SANITIZER_INTERCEPT_GETGROUPS SI_NOT_WINDOWS
Evgeniy Stepanove18e3f02013-08-12 13:19:53 +0000119# define SANITIZER_INTERCEPT_POLL SI_NOT_WINDOWS
120# define SANITIZER_INTERCEPT_PPOLL SI_LINUX_NOT_ANDROID
Evgeniy Stepanovc5a38552013-09-24 14:38:22 +0000121# define SANITIZER_INTERCEPT_WORDEXP SI_MAC || SI_LINUX_NOT_ANDROID
Evgeniy Stepanov9a949a82013-09-25 14:47:43 +0000122# define SANITIZER_INTERCEPT_SIGWAIT SI_NOT_WINDOWS
123# define SANITIZER_INTERCEPT_SIGWAITINFO SI_LINUX_NOT_ANDROID
124# define SANITIZER_INTERCEPT_SIGTIMEDWAIT SI_LINUX_NOT_ANDROID
125# define SANITIZER_INTERCEPT_SIGSETOPS SI_NOT_WINDOWS
126# define SANITIZER_INTERCEPT_SIGPENDING SI_NOT_WINDOWS
127# define SANITIZER_INTERCEPT_SIGPROCMASK SI_NOT_WINDOWS
Evgeniy Stepanov1394be12013-09-27 12:40:23 +0000128# define SANITIZER_INTERCEPT_BACKTRACE SI_LINUX_NOT_ANDROID
Evgeniy Stepanov4d7297d2013-10-18 09:41:43 +0000129# define SANITIZER_INTERCEPT_GETMNTENT SI_LINUX
130# define SANITIZER_INTERCEPT_GETMNTENT_R SI_LINUX_NOT_ANDROID
Evgeniy Stepanov5cee73e2013-10-18 11:14:16 +0000131# define SANITIZER_INTERCEPT_STATFS SI_NOT_WINDOWS
132# define SANITIZER_INTERCEPT_STATFS64 SI_MAC || SI_LINUX_NOT_ANDROID
133# define SANITIZER_INTERCEPT_STATVFS SI_LINUX_NOT_ANDROID
134# define SANITIZER_INTERCEPT_STATVFS64 SI_LINUX_NOT_ANDROID
Evgeniy Stepanov285d4582013-10-22 12:24:48 +0000135# define SANITIZER_INTERCEPT_INITGROUPS SI_NOT_WINDOWS
Evgeniy Stepanov369a9a62013-10-23 13:57:47 +0000136# define SANITIZER_INTERCEPT_ETHER SI_NOT_WINDOWS
Evgeniy Stepanov220d1f72013-10-23 15:21:10 +0000137# define SANITIZER_INTERCEPT_ETHER_R SI_LINUX_NOT_ANDROID
Evgeniy Stepanov10362d62013-10-24 14:47:34 +0000138# define SANITIZER_INTERCEPT_SHMCTL SI_LINUX_NOT_ANDROID
Evgeniy Stepanovaff25aa2013-10-25 08:58:13 +0000139# define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID
Evgeniy Stepanove236dbb2013-10-25 13:01:31 +0000140# define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_NOT_WINDOWS
141# define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED \
142 SI_MAC || SI_LINUX_NOT_ANDROID
143# define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP SI_LINUX_NOT_ANDROID
Evgeniy Stepanoveada1a82013-10-25 15:51:48 +0000144# define SANITIZER_INTERCEPT_TMPNAM SI_NOT_WINDOWS
Evgeniy Stepanovb8c9c602013-10-25 16:22:50 +0000145# define SANITIZER_INTERCEPT_TMPNAM_R SI_LINUX_NOT_ANDROID
Evgeniy Stepanoveada1a82013-10-25 15:51:48 +0000146# define SANITIZER_INTERCEPT_TEMPNAM SI_NOT_WINDOWS
Dmitry Vyukovedd28212013-04-24 11:06:05 +0000147
Dmitry Vyukov14dd9802013-10-03 15:22:29 +0000148# define SANITIZER_INTERCEPT__EXIT SI_LINUX
149
Alexey Samsonov5e2d3772013-10-16 08:20:31 +0000150# define SANITIZER_INTERCEPT_PHTREAD_MUTEX SI_NOT_WINDOWS
151# define SANITIZER_INTERCEPT_PTHREAD_COND SI_NOT_WINDOWS
Dmitry Vyukov5cf2c462013-10-29 10:30:39 +0000152# define SANITIZER_INTERCEPT_PTHREAD_SETNAME_NP SI_LINUX_NOT_ANDROID
Alexey Samsonov5e2d3772013-10-16 08:20:31 +0000153
Dmitry Vyukovedd28212013-04-24 11:06:05 +0000154#endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H