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