148 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
| //===-- 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_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_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_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_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_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_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_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_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
 |