blob: 466631802a1c4c30ec6fb54e857242372247c707 [file] [log] [blame]
Chandler Carruthd865fec2012-08-29 02:27:54 +00001//===-- sanitizer/common_interface_defs.h -----------------------*- C++ -*-===//
Alexey Samsonov0a4c9062012-06-05 13:50:57 +00002//
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
Chandler Carruthd865fec2012-08-29 02:27:54 +000015#ifndef SANITIZER_COMMON_INTERFACE_DEFS_H
16#define SANITIZER_COMMON_INTERFACE_DEFS_H
Alexey Samsonov0a4c9062012-06-05 13:50:57 +000017
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
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000025#elif defined(SANITIZER_GO)
26# define SANITIZER_INTERFACE_ATTRIBUTE
27# define SANITIZER_WEAK_ATTRIBUTE
28#else
Alexey Samsonov0a4c9062012-06-05 13:50:57 +000029# define SANITIZER_INTERFACE_ATTRIBUTE __attribute__((visibility("default")))
30# define SANITIZER_WEAK_ATTRIBUTE __attribute__((weak))
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000031#endif
Alexey Samsonov0a4c9062012-06-05 13:50:57 +000032
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
Alexey Samsonovb46941a2012-09-24 11:43:40 +000043#if defined(_WIN64)
44// 64-bit Windows uses LLP64 data model.
45typedef unsigned long long uptr; // NOLINT
46typedef signed long long sptr; // NOLINT
47#else
Alexey Samsonov0a4c9062012-06-05 13:50:57 +000048typedef unsigned long uptr; // NOLINT
49typedef signed long sptr; // NOLINT
Alexey Samsonovb46941a2012-09-24 11:43:40 +000050#endif // defined(_WIN64)
Alexey Samsonov0a4c9062012-06-05 13:50:57 +000051typedef unsigned char u8;
52typedef unsigned short u16; // NOLINT
53typedef unsigned int u32;
54typedef unsigned long long u64; // NOLINT
55typedef signed char s8;
56typedef signed short s16; // NOLINT
57typedef signed int s32;
58typedef signed long long s64; // NOLINT
59
60} // namespace __sanitizer
61
Kostya Serebryany81dfbb72012-09-14 04:35:14 +000062extern "C" {
63 // Tell the tools to write their reports to "path.<pid>" instead of stderr.
64 void __sanitizer_set_report_path(const char *path)
65 SANITIZER_INTERFACE_ATTRIBUTE;
Alexey Samsonovac8564e2012-11-02 09:23:36 +000066
67 // Tell the tools to write their reports to given file descriptor instead of
68 // stderr.
69 void __sanitizer_set_report_fd(int fd)
70 SANITIZER_INTERFACE_ATTRIBUTE;
Kostya Serebryany81dfbb72012-09-14 04:35:14 +000071} // extern "C"
72
Chandler Carruthd865fec2012-08-29 02:27:54 +000073#endif // SANITIZER_COMMON_INTERFACE_DEFS_H