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.
41namespace __sanitizer {
42
43typedef unsigned long uptr;  // NOLINT
44typedef signed   long sptr;  // NOLINT
45typedef unsigned char u8;
46typedef unsigned short u16;  // NOLINT
47typedef unsigned int u32;
48typedef unsigned long long u64;  // NOLINT
49typedef signed   char s8;
50typedef signed   short s16;  // NOLINT
51typedef signed   int s32;
52typedef signed   long long s64;  // NOLINT
53
54}  // namespace __sanitizer
55
56#endif  // SANITIZER_COMMON_INTERFACE_DEFS_H
57