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