| //===-- asan_intercepted_functions.h ----------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is a part of AddressSanitizer, an address sanity checker. |
| // |
| // ASan-private header containing prototypes for wrapper functions and wrappers |
| //===----------------------------------------------------------------------===// |
| #ifndef ASAN_INTERCEPTED_FUNCTIONS_H |
| #define ASAN_INTERCEPTED_FUNCTIONS_H |
| |
| #include "asan_internal.h" |
| #include "interception/interception.h" |
| #include "sanitizer_common/sanitizer_platform_interceptors.h" |
| |
| #include <stdarg.h> |
| #include <stddef.h> |
| |
| using __sanitizer::uptr; |
| |
| // Use macro to describe if specific function should be |
| // intercepted on a given platform. |
| #if !defined(_WIN32) |
| # define ASAN_INTERCEPT_ATOLL_AND_STRTOLL 1 |
| # define ASAN_INTERCEPT__LONGJMP 1 |
| # define ASAN_INTERCEPT_STRDUP 1 |
| # define ASAN_INTERCEPT_STRCASECMP_AND_STRNCASECMP 1 |
| # define ASAN_INTERCEPT_INDEX 1 |
| # define ASAN_INTERCEPT_PTHREAD_CREATE 1 |
| # define ASAN_INTERCEPT_MLOCKX 1 |
| #else |
| # define ASAN_INTERCEPT_ATOLL_AND_STRTOLL 0 |
| # define ASAN_INTERCEPT__LONGJMP 0 |
| # define ASAN_INTERCEPT_STRDUP 0 |
| # define ASAN_INTERCEPT_STRCASECMP_AND_STRNCASECMP 0 |
| # define ASAN_INTERCEPT_INDEX 0 |
| # define ASAN_INTERCEPT_PTHREAD_CREATE 0 |
| # define ASAN_INTERCEPT_MLOCKX 0 |
| #endif |
| |
| #if defined(__linux__) |
| # define ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX 1 |
| #else |
| # define ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX 0 |
| #endif |
| |
| #if !defined(__APPLE__) |
| # define ASAN_INTERCEPT_STRNLEN 1 |
| #else |
| # define ASAN_INTERCEPT_STRNLEN 0 |
| #endif |
| |
| #if defined(__linux__) && !defined(ANDROID) |
| # define ASAN_INTERCEPT_SWAPCONTEXT 1 |
| #else |
| # define ASAN_INTERCEPT_SWAPCONTEXT 0 |
| #endif |
| |
| #if !defined(ANDROID) && !defined(_WIN32) |
| # define ASAN_INTERCEPT_SIGNAL_AND_SIGACTION 1 |
| #else |
| # define ASAN_INTERCEPT_SIGNAL_AND_SIGACTION 0 |
| #endif |
| |
| #if !defined(_WIN32) |
| # define ASAN_INTERCEPT_SIGLONGJMP 1 |
| #else |
| # define ASAN_INTERCEPT_SIGLONGJMP 0 |
| #endif |
| |
| #if ASAN_HAS_EXCEPTIONS && !defined(_WIN32) |
| # define ASAN_INTERCEPT___CXA_THROW 1 |
| #else |
| # define ASAN_INTERCEPT___CXA_THROW 0 |
| #endif |
| |
| # if defined(_WIN32) |
| extern "C" { |
| // Windows threads. |
| __declspec(dllimport) |
| void* __stdcall CreateThread(void *sec, uptr st, void* start, |
| void *arg, DWORD fl, DWORD *id); |
| |
| int memcmp(const void *a1, const void *a2, uptr size); |
| void memmove(void *to, const void *from, uptr size); |
| void* memset(void *block, int c, uptr size); |
| void* memcpy(void *to, const void *from, uptr size); |
| char* strcat(char *to, const char* from); // NOLINT |
| char* strchr(const char *str, int c); |
| int strcmp(const char *s1, const char* s2); |
| char* strcpy(char *to, const char* from); // NOLINT |
| uptr strlen(const char *s); |
| char* strncat(char *to, const char* from, uptr size); |
| int strncmp(const char *s1, const char* s2, uptr size); |
| char* strncpy(char *to, const char* from, uptr size); |
| uptr strnlen(const char *s, uptr maxlen); |
| int atoi(const char *nptr); |
| long atol(const char *nptr); // NOLINT |
| long strtol(const char *nptr, char **endptr, int base); // NOLINT |
| void longjmp(void *env, int value); |
| double frexp(double x, int *expptr); |
| } |
| # endif |
| |
| #endif // ASAN_INTERCEPTED_FUNCTIONS_H |