1 //===-- sanitizer/common_interface_defs.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 is shared between AddressSanitizer and ThreadSanitizer. 11 // It contains basic macro and types. 12 // NOTE: This file may be included into user code. 13 //===----------------------------------------------------------------------===// 14 15 #ifndef SANITIZER_COMMON_INTERFACE_DEFS_H 16 #define SANITIZER_COMMON_INTERFACE_DEFS_H 17 18 // ----------- ATTENTION ------------- 19 // This header should NOT include any other headers to avoid portability issues. 20 21 #if defined(_WIN32) 22 // FIXME find out what we need on Windows. __declspec(dllexport) ? 23 # define SANITIZER_INTERFACE_ATTRIBUTE 24 # define SANITIZER_WEAK_ATTRIBUTE 25 #elif defined(SANITIZER_GO) 26 # define SANITIZER_INTERFACE_ATTRIBUTE 27 # define SANITIZER_WEAK_ATTRIBUTE 28 #else 29 # define SANITIZER_INTERFACE_ATTRIBUTE __attribute__((visibility("default"))) 30 # define SANITIZER_WEAK_ATTRIBUTE __attribute__((weak)) 31 #endif 32 33 // __has_feature 34 #if !defined(__has_feature) 35 # define __has_feature(x) 0 36 #endif 37 38 // For portability reasons we do not include stddef.h, stdint.h or any other 39 // system header, but we do need some basic types that are not defined 40 // in a portable way by the language itself. 41 namespace __sanitizer { 42 43 typedef unsigned long uptr; // NOLINT 44 typedef signed long sptr; // NOLINT 45 typedef unsigned char u8; 46 typedef unsigned short u16; // NOLINT 47 typedef unsigned int u32; 48 typedef unsigned long long u64; // NOLINT 49 typedef signed char s8; 50 typedef signed short s16; // NOLINT 51 typedef signed int s32; 52 typedef signed long long s64; // NOLINT 53 54 } // namespace __sanitizer 55 56 #endif // SANITIZER_COMMON_INTERFACE_DEFS_H 57