tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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