//===- FuzzerDFSan.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. // //===----------------------------------------------------------------------===// // DFSan interface. //===----------------------------------------------------------------------===// #ifndef LLVM_FUZZER_DFSAN_H #define LLVM_FUZZER_DFSAN_H #define LLVM_FUZZER_SUPPORTS_DFSAN 0 #if defined(__has_include) # if __has_include() # if defined (__linux__) # undef LLVM_FUZZER_SUPPORTS_DFSAN # define LLVM_FUZZER_SUPPORTS_DFSAN 1 # include # endif // __linux__ # endif #endif // defined(__has_include) #if LLVM_FUZZER_SUPPORTS_DFSAN extern "C" { __attribute__((weak)) dfsan_label dfsan_create_label(const char *desc, void *userdata); __attribute__((weak)) void dfsan_set_label(dfsan_label label, void *addr, size_t size); __attribute__((weak)) void dfsan_add_label(dfsan_label label, void *addr, size_t size); __attribute__((weak)) const struct dfsan_label_info *dfsan_get_label_info(dfsan_label label); __attribute__((weak)) dfsan_label dfsan_read_label(const void *addr, size_t size); } // extern "C" namespace fuzzer { static bool ReallyHaveDFSan() { return &dfsan_create_label != nullptr; } } // namespace fuzzer #else // When compiling with a compiler which does not support dfsan, // this code is still expected to build (but not necessary work). typedef unsigned short dfsan_label; struct dfsan_label_info { dfsan_label l1, l2; const char *desc; void *userdata; }; namespace fuzzer { static bool ReallyHaveDFSan() { return false; } } // namespace fuzzer #endif #endif // LLVM_FUZZER_DFSAN_H