1*08b48e0bSAndroid Build Coastguard Worker #ifndef __AFLLLVMCOMMON_H 2*08b48e0bSAndroid Build Coastguard Worker #define __AFLLLVMCOMMON_H 3*08b48e0bSAndroid Build Coastguard Worker 4*08b48e0bSAndroid Build Coastguard Worker #include <stdio.h> 5*08b48e0bSAndroid Build Coastguard Worker #include <stdlib.h> 6*08b48e0bSAndroid Build Coastguard Worker #include <unistd.h> 7*08b48e0bSAndroid Build Coastguard Worker 8*08b48e0bSAndroid Build Coastguard Worker #include <list> 9*08b48e0bSAndroid Build Coastguard Worker #include <string> 10*08b48e0bSAndroid Build Coastguard Worker #include <fstream> 11*08b48e0bSAndroid Build Coastguard Worker #include <optional> 12*08b48e0bSAndroid Build Coastguard Worker #include <sys/time.h> 13*08b48e0bSAndroid Build Coastguard Worker 14*08b48e0bSAndroid Build Coastguard Worker #include "llvm/Config/llvm-config.h" 15*08b48e0bSAndroid Build Coastguard Worker #if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR < 5 16*08b48e0bSAndroid Build Coastguard Worker typedef long double max_align_t; 17*08b48e0bSAndroid Build Coastguard Worker #endif 18*08b48e0bSAndroid Build Coastguard Worker 19*08b48e0bSAndroid Build Coastguard Worker #include "llvm/IR/IRBuilder.h" 20*08b48e0bSAndroid Build Coastguard Worker #include "llvm/IR/LegacyPassManager.h" 21*08b48e0bSAndroid Build Coastguard Worker #include "llvm/IR/BasicBlock.h" 22*08b48e0bSAndroid Build Coastguard Worker #include "llvm/IR/Module.h" 23*08b48e0bSAndroid Build Coastguard Worker #include "llvm/Support/Debug.h" 24*08b48e0bSAndroid Build Coastguard Worker #include "llvm/Support/MathExtras.h" 25*08b48e0bSAndroid Build Coastguard Worker #if LLVM_VERSION_MAJOR < 17 26*08b48e0bSAndroid Build Coastguard Worker #include "llvm/Transforms/IPO/PassManagerBuilder.h" 27*08b48e0bSAndroid Build Coastguard Worker #endif 28*08b48e0bSAndroid Build Coastguard Worker 29*08b48e0bSAndroid Build Coastguard Worker #if LLVM_VERSION_MAJOR > 3 || \ 30*08b48e0bSAndroid Build Coastguard Worker (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR > 4) 31*08b48e0bSAndroid Build Coastguard Worker #include "llvm/IR/DebugInfo.h" 32*08b48e0bSAndroid Build Coastguard Worker #include "llvm/IR/CFG.h" 33*08b48e0bSAndroid Build Coastguard Worker #else 34*08b48e0bSAndroid Build Coastguard Worker #include "llvm/DebugInfo.h" 35*08b48e0bSAndroid Build Coastguard Worker #include "llvm/Support/CFG.h" 36*08b48e0bSAndroid Build Coastguard Worker #endif 37*08b48e0bSAndroid Build Coastguard Worker 38*08b48e0bSAndroid Build Coastguard Worker #if LLVM_VERSION_MAJOR >= 11 39*08b48e0bSAndroid Build Coastguard Worker #define MNAME M.getSourceFileName() 40*08b48e0bSAndroid Build Coastguard Worker #define FMNAME F.getParent()->getSourceFileName() 41*08b48e0bSAndroid Build Coastguard Worker #if LLVM_VERSION_MAJOR >= 16 42*08b48e0bSAndroid Build Coastguard Worker // None becomes deprecated 43*08b48e0bSAndroid Build Coastguard Worker // the standard std::nullopt_t is recommended instead 44*08b48e0bSAndroid Build Coastguard Worker // from C++17 and onwards. 45*08b48e0bSAndroid Build Coastguard Worker constexpr std::nullopt_t None = std::nullopt; 46*08b48e0bSAndroid Build Coastguard Worker #endif 47*08b48e0bSAndroid Build Coastguard Worker #else 48*08b48e0bSAndroid Build Coastguard Worker #define MNAME std::string("") 49*08b48e0bSAndroid Build Coastguard Worker #define FMNAME std::string("") 50*08b48e0bSAndroid Build Coastguard Worker #endif 51*08b48e0bSAndroid Build Coastguard Worker 52*08b48e0bSAndroid Build Coastguard Worker char *getBBName(const llvm::BasicBlock *BB); 53*08b48e0bSAndroid Build Coastguard Worker bool isIgnoreFunction(const llvm::Function *F); 54*08b48e0bSAndroid Build Coastguard Worker void initInstrumentList(); 55*08b48e0bSAndroid Build Coastguard Worker bool isInInstrumentList(llvm::Function *F, std::string Filename); 56*08b48e0bSAndroid Build Coastguard Worker unsigned long long int calculateCollisions(uint32_t edges); 57*08b48e0bSAndroid Build Coastguard Worker void scanForDangerousFunctions(llvm::Module *M); 58*08b48e0bSAndroid Build Coastguard Worker 59*08b48e0bSAndroid Build Coastguard Worker #ifndef IS_EXTERN 60*08b48e0bSAndroid Build Coastguard Worker #define IS_EXTERN 61*08b48e0bSAndroid Build Coastguard Worker #endif 62*08b48e0bSAndroid Build Coastguard Worker 63*08b48e0bSAndroid Build Coastguard Worker IS_EXTERN int debug; 64*08b48e0bSAndroid Build Coastguard Worker IS_EXTERN int be_quiet; 65*08b48e0bSAndroid Build Coastguard Worker 66*08b48e0bSAndroid Build Coastguard Worker #undef IS_EXTERN 67*08b48e0bSAndroid Build Coastguard Worker 68*08b48e0bSAndroid Build Coastguard Worker #endif 69*08b48e0bSAndroid Build Coastguard Worker 70