xref: /aosp_15_r20/external/llvm/lib/Fuzzer/FuzzerDFSan.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===- FuzzerDFSan.h - Internal header for the Fuzzer -----------*- C++ -* ===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker // DFSan interface.
10*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
11*9880d681SAndroid Build Coastguard Worker 
12*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_FUZZER_DFSAN_H
13*9880d681SAndroid Build Coastguard Worker #define LLVM_FUZZER_DFSAN_H
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker #define LLVM_FUZZER_SUPPORTS_DFSAN 0
16*9880d681SAndroid Build Coastguard Worker #if defined(__has_include)
17*9880d681SAndroid Build Coastguard Worker # if __has_include(<sanitizer/dfsan_interface.h>)
18*9880d681SAndroid Build Coastguard Worker #  if defined (__linux__)
19*9880d681SAndroid Build Coastguard Worker #   undef LLVM_FUZZER_SUPPORTS_DFSAN
20*9880d681SAndroid Build Coastguard Worker #   define LLVM_FUZZER_SUPPORTS_DFSAN 1
21*9880d681SAndroid Build Coastguard Worker #   include <sanitizer/dfsan_interface.h>
22*9880d681SAndroid Build Coastguard Worker #  endif  // __linux__
23*9880d681SAndroid Build Coastguard Worker # endif
24*9880d681SAndroid Build Coastguard Worker #endif  // defined(__has_include)
25*9880d681SAndroid Build Coastguard Worker 
26*9880d681SAndroid Build Coastguard Worker #if LLVM_FUZZER_SUPPORTS_DFSAN
27*9880d681SAndroid Build Coastguard Worker 
28*9880d681SAndroid Build Coastguard Worker extern "C" {
29*9880d681SAndroid Build Coastguard Worker __attribute__((weak))
30*9880d681SAndroid Build Coastguard Worker dfsan_label dfsan_create_label(const char *desc, void *userdata);
31*9880d681SAndroid Build Coastguard Worker __attribute__((weak))
32*9880d681SAndroid Build Coastguard Worker void dfsan_set_label(dfsan_label label, void *addr, size_t size);
33*9880d681SAndroid Build Coastguard Worker __attribute__((weak))
34*9880d681SAndroid Build Coastguard Worker void dfsan_add_label(dfsan_label label, void *addr, size_t size);
35*9880d681SAndroid Build Coastguard Worker __attribute__((weak))
36*9880d681SAndroid Build Coastguard Worker const struct dfsan_label_info *dfsan_get_label_info(dfsan_label label);
37*9880d681SAndroid Build Coastguard Worker __attribute__((weak))
38*9880d681SAndroid Build Coastguard Worker dfsan_label dfsan_read_label(const void *addr, size_t size);
39*9880d681SAndroid Build Coastguard Worker }  // extern "C"
40*9880d681SAndroid Build Coastguard Worker 
41*9880d681SAndroid Build Coastguard Worker namespace fuzzer {
ReallyHaveDFSan()42*9880d681SAndroid Build Coastguard Worker static bool ReallyHaveDFSan() {
43*9880d681SAndroid Build Coastguard Worker   return &dfsan_create_label != nullptr;
44*9880d681SAndroid Build Coastguard Worker }
45*9880d681SAndroid Build Coastguard Worker }  // namespace fuzzer
46*9880d681SAndroid Build Coastguard Worker #else
47*9880d681SAndroid Build Coastguard Worker // When compiling with a compiler which does not support dfsan,
48*9880d681SAndroid Build Coastguard Worker // this code is still expected to build (but not necessary work).
49*9880d681SAndroid Build Coastguard Worker typedef unsigned short dfsan_label;
50*9880d681SAndroid Build Coastguard Worker struct dfsan_label_info {
51*9880d681SAndroid Build Coastguard Worker   dfsan_label l1, l2;
52*9880d681SAndroid Build Coastguard Worker   const char *desc;
53*9880d681SAndroid Build Coastguard Worker   void *userdata;
54*9880d681SAndroid Build Coastguard Worker };
55*9880d681SAndroid Build Coastguard Worker namespace fuzzer {
ReallyHaveDFSan()56*9880d681SAndroid Build Coastguard Worker static bool ReallyHaveDFSan() { return false; }
57*9880d681SAndroid Build Coastguard Worker }  // namespace fuzzer
58*9880d681SAndroid Build Coastguard Worker 
59*9880d681SAndroid Build Coastguard Worker #endif
60*9880d681SAndroid Build Coastguard Worker 
61*9880d681SAndroid Build Coastguard Worker #endif // LLVM_FUZZER_DFSAN_H
62