You've already forked linux-packaging-mono
acceptance-tests
data
debian
docs
external
Newtonsoft.Json
api-doc-tools
api-snapshot
aspnetwebstack
bdwgc
binary-reference-assemblies
bockbuild
boringssl
cecil
cecil-legacy
corefx
corert
helix-binaries
ikdasm
ikvm
illinker-test-assets
linker
llvm-project
clang
clang-tools-extra
compiler-rt
cmake
docs
include
lib
BlocksRuntime
asan
builtins
cfi
dfsan
esan
fuzzer
afl
scripts
standalone
tests
CMakeLists.txt
FuzzerClangCounters.cpp
FuzzerCommand.h
FuzzerCorpus.h
FuzzerCrossOver.cpp
FuzzerDefs.h
FuzzerDictionary.h
FuzzerDriver.cpp
FuzzerExtFunctions.def
FuzzerExtFunctions.h
FuzzerExtFunctionsDlsym.cpp
FuzzerExtFunctionsDlsymWin.cpp
FuzzerExtFunctionsWeak.cpp
FuzzerExtFunctionsWeakAlias.cpp
FuzzerExtraCounters.cpp
FuzzerFlags.def
FuzzerIO.cpp
FuzzerIO.h
FuzzerIOPosix.cpp
FuzzerIOWindows.cpp
FuzzerInterface.h
FuzzerInternal.h
FuzzerLoop.cpp
FuzzerMain.cpp
FuzzerMerge.cpp
FuzzerMerge.h
FuzzerMutate.cpp
FuzzerMutate.h
FuzzerOptions.h
FuzzerRandom.h
FuzzerSHA1.cpp
FuzzerSHA1.h
FuzzerShmem.h
FuzzerShmemFuchsia.cpp
FuzzerShmemPosix.cpp
FuzzerShmemWindows.cpp
FuzzerTracePC.cpp
FuzzerTracePC.h
FuzzerUtil.cpp
FuzzerUtil.h
FuzzerUtilDarwin.cpp
FuzzerUtilFuchsia.cpp
FuzzerUtilLinux.cpp
FuzzerUtilPosix.cpp
FuzzerUtilWindows.cpp
FuzzerValueBitMap.h
README.txt
build.sh
hwasan
interception
lsan
msan
profile
safestack
sanitizer_common
scudo
stats
tsan
ubsan
ubsan_minimal
xray
CMakeLists.txt
test
unittests
www
.arcconfig
.gitignore
CMakeLists.txt
CODE_OWNERS.TXT
CREDITS.TXT
LICENSE.TXT
README.txt
eng
libcxx
libcxxabi
libunwind
lld
lldb
llvm
nuget
openmp
polly
Directory.Build.props
Directory.Build.targets
NuGet.config
azure-pipelines.yml
build.cmd
build.sh
dir.common.props
global.json
llvm.proj
mxe-Win64.cmake.in
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
how-to-bump-roslyn-binaries.md
ikvm-native
llvm
m4
man
mcs
mono
msvc
netcore
po
runtime
samples
scripts
support
tools
COPYING.LIB
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
code_of_conduct.md
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-uninstalled.pc.in
test-driver
winconfig.h
168 lines
4.4 KiB
C
168 lines
4.4 KiB
C
![]() |
//===- FuzzerDefs.h - Internal header for the Fuzzer ------------*- C++ -* ===//
|
||
|
//
|
||
|
// The LLVM Compiler Infrastructure
|
||
|
//
|
||
|
// This file is distributed under the University of Illinois Open Source
|
||
|
// License. See LICENSE.TXT for details.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
// Basic definitions.
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#ifndef LLVM_FUZZER_DEFS_H
|
||
|
#define LLVM_FUZZER_DEFS_H
|
||
|
|
||
|
#include <cassert>
|
||
|
#include <cstddef>
|
||
|
#include <cstdint>
|
||
|
#include <cstring>
|
||
|
#include <string>
|
||
|
#include <vector>
|
||
|
#include <set>
|
||
|
#include <memory>
|
||
|
|
||
|
// Platform detection.
|
||
|
#ifdef __linux__
|
||
|
#define LIBFUZZER_APPLE 0
|
||
|
#define LIBFUZZER_FUCHSIA 0
|
||
|
#define LIBFUZZER_LINUX 1
|
||
|
#define LIBFUZZER_NETBSD 0
|
||
|
#define LIBFUZZER_WINDOWS 0
|
||
|
#elif __APPLE__
|
||
|
#define LIBFUZZER_APPLE 1
|
||
|
#define LIBFUZZER_FUCHSIA 0
|
||
|
#define LIBFUZZER_LINUX 0
|
||
|
#define LIBFUZZER_NETBSD 0
|
||
|
#define LIBFUZZER_WINDOWS 0
|
||
|
#elif __NetBSD__
|
||
|
#define LIBFUZZER_APPLE 0
|
||
|
#define LIBFUZZER_FUCHSIA 0
|
||
|
#define LIBFUZZER_LINUX 0
|
||
|
#define LIBFUZZER_NETBSD 1
|
||
|
#define LIBFUZZER_WINDOWS 0
|
||
|
#elif _WIN32
|
||
|
#define LIBFUZZER_APPLE 0
|
||
|
#define LIBFUZZER_FUCHSIA 0
|
||
|
#define LIBFUZZER_LINUX 0
|
||
|
#define LIBFUZZER_NETBSD 0
|
||
|
#define LIBFUZZER_WINDOWS 1
|
||
|
#elif __Fuchsia__
|
||
|
#define LIBFUZZER_APPLE 0
|
||
|
#define LIBFUZZER_FUCHSIA 1
|
||
|
#define LIBFUZZER_LINUX 0
|
||
|
#define LIBFUZZER_NETBSD 0
|
||
|
#define LIBFUZZER_WINDOWS 0
|
||
|
#else
|
||
|
#error "Support for your platform has not been implemented"
|
||
|
#endif
|
||
|
|
||
|
#ifndef __has_attribute
|
||
|
# define __has_attribute(x) 0
|
||
|
#endif
|
||
|
|
||
|
#define LIBFUZZER_POSIX (LIBFUZZER_APPLE || LIBFUZZER_LINUX || LIBFUZZER_NETBSD)
|
||
|
|
||
|
#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__
|
||
|
|
||
|
#define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
|
||
|
|
||
|
#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
|
||
|
|
||
|
#if LIBFUZZER_WINDOWS
|
||
|
#define ATTRIBUTE_INTERFACE __declspec(dllexport)
|
||
|
#else
|
||
|
#define ATTRIBUTE_INTERFACE __attribute__((visibility("default")))
|
||
|
#endif
|
||
|
|
||
|
namespace fuzzer {
|
||
|
|
||
|
template <class T> T Min(T a, T b) { return a < b ? a : b; }
|
||
|
template <class T> T Max(T a, T b) { return a > b ? a : b; }
|
||
|
|
||
|
class Random;
|
||
|
class Dictionary;
|
||
|
class DictionaryEntry;
|
||
|
class MutationDispatcher;
|
||
|
struct FuzzingOptions;
|
||
|
class InputCorpus;
|
||
|
struct InputInfo;
|
||
|
struct ExternalFunctions;
|
||
|
|
||
|
// Global interface to functions that may or may not be available.
|
||
|
extern ExternalFunctions *EF;
|
||
|
|
||
|
// We are using a custom allocator to give a different symbol name to STL
|
||
|
// containers in order to avoid ODR violations.
|
||
|
template<typename T>
|
||
|
class fuzzer_allocator: public std::allocator<T> {
|
||
|
public:
|
||
|
template<class Other>
|
||
|
struct rebind { typedef fuzzer_allocator<Other> other; };
|
||
|
};
|
||
|
|
||
|
template<typename T>
|
||
|
using Vector = std::vector<T, fuzzer_allocator<T>>;
|
||
|
|
||
|
template<typename T>
|
||
|
using Set = std::set<T, std::less<T>, fuzzer_allocator<T>>;
|
||
|
|
||
|
typedef Vector<uint8_t> Unit;
|
||
|
typedef Vector<Unit> UnitVector;
|
||
|
typedef int (*UserCallback)(const uint8_t *Data, size_t Size);
|
||
|
|
||
|
int FuzzerDriver(int *argc, char ***argv, UserCallback Callback);
|
||
|
|
||
|
struct ScopedDoingMyOwnMemOrStr {
|
||
|
ScopedDoingMyOwnMemOrStr() { DoingMyOwnMemOrStr++; }
|
||
|
~ScopedDoingMyOwnMemOrStr() { DoingMyOwnMemOrStr--; }
|
||
|
static int DoingMyOwnMemOrStr;
|
||
|
};
|
||
|
|
||
|
inline uint8_t Bswap(uint8_t x) { return x; }
|
||
|
inline uint16_t Bswap(uint16_t x) { return __builtin_bswap16(x); }
|
||
|
inline uint32_t Bswap(uint32_t x) { return __builtin_bswap32(x); }
|
||
|
inline uint64_t Bswap(uint64_t x) { return __builtin_bswap64(x); }
|
||
|
|
||
|
uint8_t *ExtraCountersBegin();
|
||
|
uint8_t *ExtraCountersEnd();
|
||
|
void ClearExtraCounters();
|
||
|
|
||
|
uint64_t *ClangCountersBegin();
|
||
|
uint64_t *ClangCountersEnd();
|
||
|
void ClearClangCounters();
|
||
|
|
||
|
} // namespace fuzzer
|
||
|
|
||
|
#endif // LLVM_FUZZER_DEFS_H
|