Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/fuzzer/FuzzerPlatform.h
35262 views
1
//===-- FuzzerPlatform.h --------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
// Common platform macros.
9
//===----------------------------------------------------------------------===//
10
11
#ifndef LLVM_FUZZER_PLATFORM_H
12
#define LLVM_FUZZER_PLATFORM_H
13
14
// Platform detection.
15
#ifdef __linux__
16
#define LIBFUZZER_APPLE 0
17
#define LIBFUZZER_FUCHSIA 0
18
#define LIBFUZZER_LINUX 1
19
#define LIBFUZZER_NETBSD 0
20
#define LIBFUZZER_FREEBSD 0
21
#define LIBFUZZER_WINDOWS 0
22
#define LIBFUZZER_EMSCRIPTEN 0
23
#elif __APPLE__
24
#define LIBFUZZER_APPLE 1
25
#define LIBFUZZER_FUCHSIA 0
26
#define LIBFUZZER_LINUX 0
27
#define LIBFUZZER_NETBSD 0
28
#define LIBFUZZER_FREEBSD 0
29
#define LIBFUZZER_WINDOWS 0
30
#define LIBFUZZER_EMSCRIPTEN 0
31
#elif __NetBSD__
32
#define LIBFUZZER_APPLE 0
33
#define LIBFUZZER_FUCHSIA 0
34
#define LIBFUZZER_LINUX 0
35
#define LIBFUZZER_NETBSD 1
36
#define LIBFUZZER_FREEBSD 0
37
#define LIBFUZZER_WINDOWS 0
38
#define LIBFUZZER_EMSCRIPTEN 0
39
#elif __FreeBSD__
40
#define LIBFUZZER_APPLE 0
41
#define LIBFUZZER_FUCHSIA 0
42
#define LIBFUZZER_LINUX 0
43
#define LIBFUZZER_NETBSD 0
44
#define LIBFUZZER_FREEBSD 1
45
#define LIBFUZZER_WINDOWS 0
46
#define LIBFUZZER_EMSCRIPTEN 0
47
#elif _WIN32
48
#define LIBFUZZER_APPLE 0
49
#define LIBFUZZER_FUCHSIA 0
50
#define LIBFUZZER_LINUX 0
51
#define LIBFUZZER_NETBSD 0
52
#define LIBFUZZER_FREEBSD 0
53
#define LIBFUZZER_WINDOWS 1
54
#define LIBFUZZER_EMSCRIPTEN 0
55
#elif __Fuchsia__
56
#define LIBFUZZER_APPLE 0
57
#define LIBFUZZER_FUCHSIA 1
58
#define LIBFUZZER_LINUX 0
59
#define LIBFUZZER_NETBSD 0
60
#define LIBFUZZER_FREEBSD 0
61
#define LIBFUZZER_WINDOWS 0
62
#define LIBFUZZER_EMSCRIPTEN 0
63
#elif __EMSCRIPTEN__
64
#define LIBFUZZER_APPLE 0
65
#define LIBFUZZER_FUCHSIA 0
66
#define LIBFUZZER_LINUX 0
67
#define LIBFUZZER_NETBSD 0
68
#define LIBFUZZER_FREEBSD 0
69
#define LIBFUZZER_WINDOWS 0
70
#define LIBFUZZER_EMSCRIPTEN 1
71
#else
72
#error "Support for your platform has not been implemented"
73
#endif
74
75
#if defined(_MSC_VER) && !defined(__clang__)
76
// MSVC compiler is being used.
77
#define LIBFUZZER_MSVC 1
78
#else
79
#define LIBFUZZER_MSVC 0
80
#endif
81
82
#ifndef __has_attribute
83
#define __has_attribute(x) 0
84
#endif
85
86
#define LIBFUZZER_POSIX \
87
(LIBFUZZER_APPLE || LIBFUZZER_LINUX || LIBFUZZER_NETBSD || \
88
LIBFUZZER_FREEBSD || LIBFUZZER_EMSCRIPTEN)
89
90
#if defined(__x86_64) && defined(__POPCNT__)
91
#if __has_attribute(target)
92
#define ATTRIBUTE_TARGET_POPCNT __attribute__((target("popcnt")))
93
#else
94
#define ATTRIBUTE_TARGET_POPCNT
95
#endif
96
#else
97
#define ATTRIBUTE_TARGET_POPCNT
98
#endif
99
100
#ifdef __clang__ // avoid gcc warning.
101
#if __has_attribute(no_sanitize)
102
#define ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize("memory")))
103
#else
104
#define ATTRIBUTE_NO_SANITIZE_MEMORY
105
#endif
106
#define ALWAYS_INLINE __attribute__((always_inline))
107
#else
108
#define ATTRIBUTE_NO_SANITIZE_MEMORY
109
#define ALWAYS_INLINE
110
#endif // __clang__
111
112
#if LIBFUZZER_WINDOWS
113
#define ATTRIBUTE_NO_SANITIZE_ADDRESS
114
#else
115
#define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
116
#endif
117
118
#if LIBFUZZER_WINDOWS
119
#define ATTRIBUTE_ALIGNED(X) __declspec(align(X))
120
#define ATTRIBUTE_INTERFACE __declspec(dllexport)
121
// This is used for __sancov_lowest_stack which is needed for
122
// -fsanitize-coverage=stack-depth. That feature is not yet available on
123
// Windows, so make the symbol static to avoid linking errors.
124
#define ATTRIBUTES_INTERFACE_TLS_INITIAL_EXEC static
125
#define ATTRIBUTE_NOINLINE __declspec(noinline)
126
#else
127
#define ATTRIBUTE_ALIGNED(X) __attribute__((aligned(X)))
128
#define ATTRIBUTE_INTERFACE __attribute__((visibility("default")))
129
#define ATTRIBUTES_INTERFACE_TLS_INITIAL_EXEC \
130
ATTRIBUTE_INTERFACE __attribute__((tls_model("initial-exec"))) thread_local
131
132
#define ATTRIBUTE_NOINLINE __attribute__((noinline))
133
#endif
134
135
#if defined(__has_feature)
136
#if __has_feature(address_sanitizer)
137
#define ATTRIBUTE_NO_SANITIZE_ALL ATTRIBUTE_NO_SANITIZE_ADDRESS
138
#elif __has_feature(memory_sanitizer)
139
#define ATTRIBUTE_NO_SANITIZE_ALL ATTRIBUTE_NO_SANITIZE_MEMORY
140
#else
141
#define ATTRIBUTE_NO_SANITIZE_ALL
142
#endif
143
#else
144
#define ATTRIBUTE_NO_SANITIZE_ALL
145
#endif
146
147
#endif // LLVM_FUZZER_PLATFORM_H
148
149