1*4ba319b5SDimitry Andric //===- FuzzerExtFunctions.h - Interface to external functions ---*- C++ -* ===//
2*4ba319b5SDimitry Andric //
3*4ba319b5SDimitry Andric //                     The LLVM Compiler Infrastructure
4*4ba319b5SDimitry Andric //
5*4ba319b5SDimitry Andric // This file is distributed under the University of Illinois Open Source
6*4ba319b5SDimitry Andric // License. See LICENSE.TXT for details.
7*4ba319b5SDimitry Andric //
8*4ba319b5SDimitry Andric //===----------------------------------------------------------------------===//
9*4ba319b5SDimitry Andric // Defines an interface to (possibly optional) functions.
10*4ba319b5SDimitry Andric //===----------------------------------------------------------------------===//
11*4ba319b5SDimitry Andric 
12*4ba319b5SDimitry Andric #ifndef LLVM_FUZZER_EXT_FUNCTIONS_H
13*4ba319b5SDimitry Andric #define LLVM_FUZZER_EXT_FUNCTIONS_H
14*4ba319b5SDimitry Andric 
15*4ba319b5SDimitry Andric #include <stddef.h>
16*4ba319b5SDimitry Andric #include <stdint.h>
17*4ba319b5SDimitry Andric 
18*4ba319b5SDimitry Andric namespace fuzzer {
19*4ba319b5SDimitry Andric 
20*4ba319b5SDimitry Andric struct ExternalFunctions {
21*4ba319b5SDimitry Andric   // Initialize function pointers. Functions that are not available will be set
22*4ba319b5SDimitry Andric   // to nullptr.  Do not call this constructor  before ``main()`` has been
23*4ba319b5SDimitry Andric   // entered.
24*4ba319b5SDimitry Andric   ExternalFunctions();
25*4ba319b5SDimitry Andric 
26*4ba319b5SDimitry Andric #define EXT_FUNC(NAME, RETURN_TYPE, FUNC_SIG, WARN)                            \
27*4ba319b5SDimitry Andric   RETURN_TYPE(*NAME) FUNC_SIG = nullptr
28*4ba319b5SDimitry Andric 
29*4ba319b5SDimitry Andric #include "FuzzerExtFunctions.def"
30*4ba319b5SDimitry Andric 
31*4ba319b5SDimitry Andric #undef EXT_FUNC
32*4ba319b5SDimitry Andric };
33*4ba319b5SDimitry Andric } // namespace fuzzer
34*4ba319b5SDimitry Andric 
35*4ba319b5SDimitry Andric #endif
36