//===-- 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