xref: /aosp_15_r20/external/AFLplusplus/instrumentation/afl-llvm-common.h (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
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