afl-llvm20.patch (11973B)
1 From 30861b5d542105f19e65b5ca90e3f1385743d457 Mon Sep 17 00:00:00 2001 2 From: vanhauser-thc <vh@thc.org> 3 Date: Thu, 16 Jan 2025 15:32:58 +0100 4 Subject: [PATCH] llvm 20 support 5 6 --- 7 GNUmakefile.llvm | 4 ++-- 8 instrumentation/SanitizerCoveragePCGUARD.so.cc | 4 ++++ 9 instrumentation/afl-llvm-dict2file.so.cc | 13 +++++++++---- 10 instrumentation/afl-llvm-lto-instrumentlist.so.cc | 13 +++++++++---- 11 instrumentation/afl-llvm-pass.so.cc | 7 +++++-- 12 instrumentation/cmplog-instructions-pass.cc | 13 +++++++++---- 13 instrumentation/cmplog-routines-pass.cc | 13 +++++++++---- 14 instrumentation/cmplog-switches-pass.cc | 13 +++++++++---- 15 instrumentation/compare-transform-pass.so.cc | 4 ++++ 16 instrumentation/injection-pass.cc | 13 +++++++++---- 17 instrumentation/split-compares-pass.so.cc | 4 ++++ 18 instrumentation/split-switches-pass.so.cc | 4 ++++ 19 14 files changed, 81 insertions(+), 30 deletions(-) 20 21 diff --git a/GNUmakefile.llvm b/GNUmakefile.llvm 22 index 5e0adb7f..2d9cc51a 100644 23 --- a/GNUmakefile.llvm 24 +++ b/GNUmakefile.llvm 25 @@ -69,7 +69,7 @@ endif 26 27 LLVM_STDCXX := gnu++11 28 LLVM_LTO := 0 29 -LLVM_UNSUPPORTED := $(shell echo "$(LLVMVER)" | grep -E -q '^[0-2]\.|^3\.[0-7]\.|^2[0-9]\.' && echo 1 || echo 0) 30 +LLVM_UNSUPPORTED := $(shell echo "$(LLVMVER)" | grep -E -q '^[0-2]\.|^3\.[0-7]\.|^2[1-9]\.' && echo 1 || echo 0) 31 # Uncomment to see the values assigned above 32 # $(foreach var,_CLANG_VERSIONS_TO_TEST LLVM_CONFIG LLVMVER LLVM_MAJOR LLVM_MINOR LLVM_TOO_NEW LLVM_TOO_OLD LLVM_TOO_NEW_DEFAULT LLVM_TOO_OLD_DEFAULT LLVM_NEW_API LLVM_NEWER_API LLVM_13_OK LLVM_HAVE_LTO LLVM_BINDIR LLVM_LIBDIR LLVM_STDCXX LLVM_APPLE_XCODE LLVM_LTO LLVM_UNSUPPORTED,$(warning $(var) = $($(var)))) 33 34 @@ -78,7 +78,7 @@ ifeq "$(LLVMVER)" "" 35 endif 36 37 ifeq "$(LLVM_UNSUPPORTED)" "1" 38 - $(error llvm_mode only supports llvm from version 3.8 onwards) 39 + $(error llvm_mode only supports llvm from version 3.8 onwards - or your version is too new. Upgrade AFL++ if possible or downgrade LLVM.) 40 endif 41 42 ifeq "$(LLVM_TOO_NEW)" "1" 43 index a9c87094..fae33d27 100644 44 --- a/instrumentation/SanitizerCoveragePCGUARD.so.cc 45 +++ b/instrumentation/SanitizerCoveragePCGUARD.so.cc 46 @@ -226,7 +226,11 @@ llvmGetPassPluginInfo() { 47 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 48 #endif 49 #if LLVM_VERSION_MAJOR >= 16 50 + #if LLVM_VERSION_MAJOR >= 20 51 + PB.registerPipelineStartEPCallback( 52 + #else 53 PB.registerOptimizerEarlyEPCallback( 54 + #endif 55 #else 56 PB.registerOptimizerLastEPCallback( 57 #endif 58 diff --git a/instrumentation/afl-llvm-dict2file.so.cc b/instrumentation/afl-llvm-dict2file.so.cc 59 index 6559bc84..c6b7312e 100644 60 --- a/instrumentation/afl-llvm-dict2file.so.cc 61 +++ b/instrumentation/afl-llvm-dict2file.so.cc 62 @@ -120,12 +120,17 @@ llvmGetPassPluginInfo() { 63 #if LLVM_VERSION_MAJOR <= 13 64 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 65 #endif 66 - PB.registerOptimizerLastEPCallback( 67 - [](ModulePassManager &MPM, OptimizationLevel OL) { 68 + PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM, 69 + OptimizationLevel OL 70 + #if LLVM_VERSION_MAJOR >= 20 71 + , 72 + ThinOrFullLTOPhase Phase 73 + #endif 74 + ) { 75 76 - MPM.addPass(AFLdict2filePass()); 77 + MPM.addPass(AFLdict2filePass()); 78 79 - }); 80 + }); 81 82 }}; 83 84 diff --git a/instrumentation/afl-llvm-lto-instrumentlist.so.cc b/instrumentation/afl-llvm-lto-instrumentlist.so.cc 85 index 17abe2a8..a0d4811d 100644 86 --- a/instrumentation/afl-llvm-lto-instrumentlist.so.cc 87 +++ b/instrumentation/afl-llvm-lto-instrumentlist.so.cc 88 @@ -83,12 +83,17 @@ llvmGetPassPluginInfo() { 89 #if LLVM_VERSION_MAJOR <= 13 90 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 91 #endif 92 - PB.registerOptimizerLastEPCallback( 93 - [](ModulePassManager &MPM, OptimizationLevel OL) { 94 + PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM, 95 + OptimizationLevel OL 96 +#if LLVM_VERSION_MAJOR >= 20 97 + , 98 + ThinOrFullLTOPhase Phase 99 +#endif 100 + ) { 101 102 - MPM.addPass(AFLcheckIfInstrument()); 103 + MPM.addPass(AFLcheckIfInstrument()); 104 105 - }); 106 + }); 107 108 }}; 109 110 diff --git a/instrumentation/afl-llvm-pass.so.cc b/instrumentation/afl-llvm-pass.so.cc 111 index 8620fb3f..c599e957 100644 112 --- a/instrumentation/afl-llvm-pass.so.cc 113 +++ b/instrumentation/afl-llvm-pass.so.cc 114 @@ -110,8 +110,7 @@ class AFLCoverage : public ModulePass { 115 } // namespace 116 117 #if LLVM_VERSION_MAJOR >= 11 /* use new pass manager */ 118 -extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK 119 -llvmGetPassPluginInfo() { 120 +extern "C" LLVM_ATTRIBUTE_WEAK PassPluginLibraryInfo llvmGetPassPluginInfo() { 121 122 return {LLVM_PLUGIN_API_VERSION, "AFLCoverage", "v0.1", 123 /* lambda to insert our pass into the pass pipeline. */ 124 @@ -122,7 +121,11 @@ llvmGetPassPluginInfo() { 125 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 126 #endif 127 #if LLVM_VERSION_MAJOR >= 16 128 + #if LLVM_VERSION_MAJOR >= 20 129 + PB.registerPipelineStartEPCallback( 130 + #else 131 PB.registerOptimizerEarlyEPCallback( 132 + #endif 133 #else 134 PB.registerOptimizerLastEPCallback( 135 #endif 136 diff --git a/instrumentation/cmplog-instructions-pass.cc b/instrumentation/cmplog-instructions-pass.cc 137 index fe5c2926..a2165d7b 100644 138 --- a/instrumentation/cmplog-instructions-pass.cc 139 +++ b/instrumentation/cmplog-instructions-pass.cc 140 @@ -123,12 +123,17 @@ llvmGetPassPluginInfo() { 141 #if LLVM_VERSION_MAJOR <= 13 142 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 143 #endif 144 - PB.registerOptimizerLastEPCallback( 145 - [](ModulePassManager &MPM, OptimizationLevel OL) { 146 + PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM, 147 + OptimizationLevel OL 148 + #if LLVM_VERSION_MAJOR >= 20 149 + , 150 + ThinOrFullLTOPhase Phase 151 + #endif 152 + ) { 153 154 - MPM.addPass(CmpLogInstructions()); 155 + MPM.addPass(CmpLogInstructions()); 156 157 - }); 158 + }); 159 160 }}; 161 162 diff --git a/instrumentation/cmplog-routines-pass.cc b/instrumentation/cmplog-routines-pass.cc 163 index 560bd73b..d3fafe53 100644 164 --- a/instrumentation/cmplog-routines-pass.cc 165 +++ b/instrumentation/cmplog-routines-pass.cc 166 @@ -118,12 +118,17 @@ llvmGetPassPluginInfo() { 167 #if LLVM_VERSION_MAJOR <= 13 168 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 169 #endif 170 - PB.registerOptimizerLastEPCallback( 171 - [](ModulePassManager &MPM, OptimizationLevel OL) { 172 + PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM, 173 + OptimizationLevel OL 174 + #if LLVM_VERSION_MAJOR >= 20 175 + , 176 + ThinOrFullLTOPhase Phase 177 + #endif 178 + ) { 179 180 - MPM.addPass(CmpLogRoutines()); 181 + MPM.addPass(CmpLogRoutines()); 182 183 - }); 184 + }); 185 186 }}; 187 188 diff --git a/instrumentation/cmplog-switches-pass.cc b/instrumentation/cmplog-switches-pass.cc 189 index 2b87ea8c..727c47d6 100644 190 --- a/instrumentation/cmplog-switches-pass.cc 191 +++ b/instrumentation/cmplog-switches-pass.cc 192 @@ -118,12 +118,17 @@ llvmGetPassPluginInfo() { 193 #if LLVM_VERSION_MAJOR <= 13 194 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 195 #endif 196 - PB.registerOptimizerLastEPCallback( 197 - [](ModulePassManager &MPM, OptimizationLevel OL) { 198 + PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM, 199 + OptimizationLevel OL 200 + #if LLVM_VERSION_MAJOR >= 20 201 + , 202 + ThinOrFullLTOPhase Phase 203 + #endif 204 + ) { 205 206 - MPM.addPass(CmplogSwitches()); 207 + MPM.addPass(CmplogSwitches()); 208 209 - }); 210 + }); 211 212 }}; 213 214 diff --git a/instrumentation/compare-transform-pass.so.cc b/instrumentation/compare-transform-pass.so.cc 215 index 36149f35..5516880c 100644 216 --- a/instrumentation/compare-transform-pass.so.cc 217 +++ b/instrumentation/compare-transform-pass.so.cc 218 @@ -130,7 +130,11 @@ llvmGetPassPluginInfo() { 219 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 220 #endif 221 #if LLVM_VERSION_MAJOR >= 16 222 + #if LLVM_VERSION_MAJOR >= 20 223 + PB.registerPipelineStartEPCallback( 224 + #else 225 PB.registerOptimizerEarlyEPCallback( 226 + #endif 227 #else 228 PB.registerOptimizerLastEPCallback( 229 #endif 230 diff --git a/instrumentation/injection-pass.cc b/instrumentation/injection-pass.cc 231 index 47ddabd9..f745de78 100644 232 --- a/instrumentation/injection-pass.cc 233 +++ b/instrumentation/injection-pass.cc 234 @@ -122,12 +122,17 @@ llvmGetPassPluginInfo() { 235 #if LLVM_VERSION_MAJOR <= 13 236 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 237 #endif 238 - PB.registerOptimizerLastEPCallback( 239 - [](ModulePassManager &MPM, OptimizationLevel OL) { 240 + PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM, 241 + OptimizationLevel OL 242 + #if LLVM_VERSION_MAJOR >= 20 243 + , 244 + ThinOrFullLTOPhase Phase 245 + #endif 246 + ) { 247 248 - MPM.addPass(InjectionRoutines()); 249 + MPM.addPass(InjectionRoutines()); 250 251 - }); 252 + }); 253 254 }}; 255 256 diff --git a/instrumentation/split-compares-pass.so.cc b/instrumentation/split-compares-pass.so.cc 257 index effafe50..cc031073 100644 258 --- a/instrumentation/split-compares-pass.so.cc 259 +++ b/instrumentation/split-compares-pass.so.cc 260 @@ -190,7 +190,11 @@ llvmGetPassPluginInfo() { 261 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 262 #endif 263 #if LLVM_VERSION_MAJOR >= 16 264 + #if LLVM_VERSION_MAJOR >= 20 265 + PB.registerPipelineStartEPCallback( 266 + #else 267 PB.registerOptimizerEarlyEPCallback( 268 + #endif 269 #else 270 PB.registerOptimizerLastEPCallback( 271 #endif 272 diff --git a/instrumentation/split-switches-pass.so.cc b/instrumentation/split-switches-pass.so.cc 273 index aa552a42..1e4052a3 100644 274 --- a/instrumentation/split-switches-pass.so.cc 275 +++ b/instrumentation/split-switches-pass.so.cc 276 @@ -138,7 +138,11 @@ llvmGetPassPluginInfo() { 277 using OptimizationLevel = typename PassBuilder::OptimizationLevel; 278 #endif 279 #if LLVM_VERSION_MAJOR >= 16 280 + #if LLVM_VERSION_MAJOR >= 20 281 + PB.registerPipelineStartEPCallback( 282 + #else 283 PB.registerOptimizerEarlyEPCallback( 284 + #endif 285 #else 286 PB.registerOptimizerLastEPCallback( 287 #endif 288 -- 289 2.51.0.1.g7a422dac74