From bb4b1f1b334e67283bc120c49245d813af6a70ce Mon Sep 17 00:00:00 2001 From: "Dongjia \"toka\" Zhang" Date: Tue, 28 Jan 2025 14:41:13 +0100 Subject: [PATCH] LLVM 20 update (#2902) * LLVM 20 * clang format --- libafl_cc/src/autotokens-pass.cc | 20 ++--- libafl_cc/src/cmplog-instructions-pass.cc | 7 +- libafl_cc/src/cmplog-routines-pass.cc | 13 +-- libafl_cc/src/coverage-accounting-pass.cc | 13 +-- libafl_cc/src/ctx-pass.cc | 13 ++- libafl_cc/src/ddg-instr.cc | 14 ++-- libafl_cc/src/ddg-utils.cc | 1 - libafl_cc/src/ddg-utils.h | 1 - libafl_cc/src/dump-cfg-pass.cc | 14 ++-- libafl_cc/src/function-logging.cc | 13 ++- libafl_cc/src/profiling-pass.cc | 98 ++++++++++++++--------- 11 files changed, 107 insertions(+), 100 deletions(-) diff --git a/libafl_cc/src/autotokens-pass.cc b/libafl_cc/src/autotokens-pass.cc index 74224c0271..db6664674e 100644 --- a/libafl_cc/src/autotokens-pass.cc +++ b/libafl_cc/src/autotokens-pass.cc @@ -63,13 +63,6 @@ #include -#define FATAL(x...) \ - do { \ - fprintf(stderr, "FATAL: " x); \ - exit(1); \ - \ - } while (0) - using namespace llvm; namespace { @@ -106,14 +99,13 @@ llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "AutoTokensPass", "v0.1", /* lambda to insert our pass into the pass pipeline. */ [](PassBuilder &PB) { - - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; - #endif PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(AutoTokensPass()); - }); + [](ModulePassManager &MPM, OptimizationLevel OL + #if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase + #endif + ) { MPM.addPass(AutoTokensPass()); }); }}; } #else diff --git a/libafl_cc/src/cmplog-instructions-pass.cc b/libafl_cc/src/cmplog-instructions-pass.cc index 22a641aa2a..27bd1c88cc 100644 --- a/libafl_cc/src/cmplog-instructions-pass.cc +++ b/libafl_cc/src/cmplog-instructions-pass.cc @@ -95,11 +95,12 @@ extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "CmpLogInstructions", "v0.1", [](PassBuilder &PB) { - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; - #endif #if LLVM_VERSION_MAJOR >= 16 + #if LLVM_VERSION_MAJOR >= 20 + PB.registerPipelineStartEPCallback( + #else PB.registerOptimizerEarlyEPCallback( + #endif #else PB.registerOptimizerLastEPCallback( #endif diff --git a/libafl_cc/src/cmplog-routines-pass.cc b/libafl_cc/src/cmplog-routines-pass.cc index 0a68ab544f..953edbf598 100644 --- a/libafl_cc/src/cmplog-routines-pass.cc +++ b/libafl_cc/src/cmplog-routines-pass.cc @@ -93,13 +93,14 @@ extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "CmpLogRoutines", "v0.1", [](PassBuilder &PB) { - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; - #endif PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(CmpLogRoutines()); - }); + [](ModulePassManager &MPM, OptimizationLevel OL + #if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase + #endif + + ) { MPM.addPass(CmpLogRoutines()); }); }}; } #else diff --git a/libafl_cc/src/coverage-accounting-pass.cc b/libafl_cc/src/coverage-accounting-pass.cc index a7416bb307..292ee6fc94 100644 --- a/libafl_cc/src/coverage-accounting-pass.cc +++ b/libafl_cc/src/coverage-accounting-pass.cc @@ -218,13 +218,14 @@ llvmGetPassPluginInfo() { /* lambda to insert our pass into the pass pipeline. */ [](PassBuilder &PB) { #if 1 - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; - #endif PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(AFLCoverage()); - }); + [](ModulePassManager &MPM, OptimizationLevel OL + #if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase + #endif + + ) { MPM.addPass(AFLCoverage()); }); /* TODO LTO registration */ #else using PipelineElement = typename PassBuilder::PipelineElement; diff --git a/libafl_cc/src/ctx-pass.cc b/libafl_cc/src/ctx-pass.cc index 527c0cddac..3657312df1 100644 --- a/libafl_cc/src/ctx-pass.cc +++ b/libafl_cc/src/ctx-pass.cc @@ -113,14 +113,13 @@ llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "CtxPass", "v0.1", /* lambda to insert our pass into the pass pipeline. */ [](PassBuilder &PB) { - - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; + PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM, + OptimizationLevel OL + #if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase #endif - PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(CtxPass()); - }); + ) { MPM.addPass(CtxPass()); }); }}; } #else diff --git a/libafl_cc/src/ddg-instr.cc b/libafl_cc/src/ddg-instr.cc index 87539911eb..d67f7a5d86 100644 --- a/libafl_cc/src/ddg-instr.cc +++ b/libafl_cc/src/ddg-instr.cc @@ -61,7 +61,6 @@ #include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/raw_ostream.h" #include -#include "llvm/Transforms/Instrumentation.h" #include "llvm/Transforms/Utils/ASanStackFrameLayout.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Local.h" @@ -774,13 +773,12 @@ llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "DDGInstrPass", "v0.1", /* lambda to insert our pass into the pass pipeline. */ [](PassBuilder &PB) { - -#if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; -#endif PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(DDGInstrModulePass()); - }); + [](ModulePassManager &MPM, OptimizationLevel OL +#if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase +#endif + ) { MPM.addPass(DDGInstrModulePass()); }); }}; } diff --git a/libafl_cc/src/ddg-utils.cc b/libafl_cc/src/ddg-utils.cc index e04fceddbf..98c9afe954 100644 --- a/libafl_cc/src/ddg-utils.cc +++ b/libafl_cc/src/ddg-utils.cc @@ -7,7 +7,6 @@ #include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/raw_ostream.h" #include -#include "llvm/Transforms/Instrumentation.h" #include "llvm/Transforms/Utils/ASanStackFrameLayout.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Local.h" diff --git a/libafl_cc/src/ddg-utils.h b/libafl_cc/src/ddg-utils.h index b00b1548ab..9de3bf1df4 100644 --- a/libafl_cc/src/ddg-utils.h +++ b/libafl_cc/src/ddg-utils.h @@ -61,7 +61,6 @@ #include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/raw_ostream.h" #include -#include "llvm/Transforms/Instrumentation.h" #include "llvm/Transforms/Utils/ASanStackFrameLayout.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Local.h" diff --git a/libafl_cc/src/dump-cfg-pass.cc b/libafl_cc/src/dump-cfg-pass.cc index 12affe2cf0..37bc91a96f 100644 --- a/libafl_cc/src/dump-cfg-pass.cc +++ b/libafl_cc/src/dump-cfg-pass.cc @@ -121,14 +121,14 @@ llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "DumpCfgPass", "v0.1", /* lambda to insert our pass into the pass pipeline. */ [](PassBuilder &PB) { - - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; - #endif PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(DumpCfgPass()); - }); + [](ModulePassManager &MPM, OptimizationLevel OL + #if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase + #endif + + ) { MPM.addPass(DumpCfgPass()); }); }}; } #else diff --git a/libafl_cc/src/function-logging.cc b/libafl_cc/src/function-logging.cc index f96c2f4b2f..ca2f81d957 100644 --- a/libafl_cc/src/function-logging.cc +++ b/libafl_cc/src/function-logging.cc @@ -113,14 +113,13 @@ llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "FunctionLoggingPass", "v0.1", /* lambda to insert our pass into the pass pipeline. */ [](PassBuilder &PB) { - - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; - #endif PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(FunctionLogging()); - }); + [](ModulePassManager &MPM, OptimizationLevel OL + #if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase + #endif + ) { MPM.addPass(FunctionLogging()); }); }}; } #else diff --git a/libafl_cc/src/profiling-pass.cc b/libafl_cc/src/profiling-pass.cc index 1e9c2891b3..1191f239da 100644 --- a/libafl_cc/src/profiling-pass.cc +++ b/libafl_cc/src/profiling-pass.cc @@ -253,21 +253,28 @@ class AnalysisPass : public ModulePass { } bool isMemorySensitiveFn(StringRef &n) { - if (n.equals("write") || n.equals("read") || n.equals("fgets") || - n.equals("memcmp") || n.equals("memcpy") || n.equals("mempcpy") || - n.equals("memmove") || n.equals("memset") || n.equals("memchr") || - n.equals("memrchr") || n.equals("memmem") || n.equals("bzero") || - n.equals("explicit_bzero") || n.equals("bcmp") || n.equals("strchr") || - n.equals("strrchr") || n.equals("strcasecmp") || n.equals("strncat") || - n.equals("strerror") || n.equals("strncasecmp") || n.equals("strcat") || - n.equals("strcmp") || n.equals("strspn") || n.equals("strncmp") || - n.equals("strcpy") || n.equals("strncpy") || n.equals("strcoll") || - n.equals("stpcpy") || n.equals("strdup") || n.equals("strlen") || - n.equals("strxfrm") || n.equals("strtok") || n.equals("strnlen") || - n.equals("strstr") || n.equals("strcasestr") || n.equals("strscpn") || - n.equals("strpbrk") || n.equals("atoi") || n.equals("atol") || - n.equals("atoll") || n.equals("wcslen") || n.equals("wcscpy") || - n.equals("wcscmp")) { + if (n.equals_insensitive("write") || n.equals_insensitive("read") || + n.equals_insensitive("fgets") || n.equals_insensitive("memcmp") || + n.equals_insensitive("memcpy") || n.equals_insensitive("mempcpy") || + n.equals_insensitive("memmove") || n.equals_insensitive("memset") || + n.equals_insensitive("memchr") || n.equals_insensitive("memrchr") || + n.equals_insensitive("memmem") || n.equals_insensitive("bzero") || + n.equals_insensitive("explicit_bzero") || + n.equals_insensitive("bcmp") || n.equals_insensitive("strchr") || + n.equals_insensitive("strrchr") || n.equals_insensitive("strcasecmp") || + n.equals_insensitive("strncat") || n.equals_insensitive("strerror") || + n.equals_insensitive("strncasecmp") || n.equals_insensitive("strcat") || + n.equals_insensitive("strcmp") || n.equals_insensitive("strspn") || + n.equals_insensitive("strncmp") || n.equals_insensitive("strcpy") || + n.equals_insensitive("strncpy") || n.equals_insensitive("strcoll") || + n.equals_insensitive("stpcpy") || n.equals_insensitive("strdup") || + n.equals_insensitive("strlen") || n.equals_insensitive("strxfrm") || + n.equals_insensitive("strtok") || n.equals_insensitive("strnlen") || + n.equals_insensitive("strstr") || n.equals_insensitive("strcasestr") || + n.equals_insensitive("strscpn") || n.equals_insensitive("strpbrk") || + n.equals_insensitive("atoi") || n.equals_insensitive("atol") || + n.equals_insensitive("atoll") || n.equals_insensitive("wcslen") || + n.equals_insensitive("wcscpy") || n.equals_insensitive("wcscmp")) { return true; } else { return false; @@ -275,11 +282,15 @@ class AnalysisPass : public ModulePass { } bool isMallocFn(StringRef &n) { - if (n.equals("malloc") || n.equals("calloc") || n.equals("realloc") || - n.equals("reallocarray") || n.equals("memalign") || - n.equals("__libc_memalign") || n.equals("aligned_alloc") || - n.equals("posix_memalign") || n.equals("valloc") || - n.equals("pvalloc") || n.equals("mmap")) { + if (n.equals_insensitive("malloc") || n.equals_insensitive("calloc") || + n.equals_insensitive("realloc") || + n.equals_insensitive("reallocarray") || + n.equals_insensitive("memalign") || + n.equals_insensitive("__libc_memalign") || + n.equals_insensitive("aligned_alloc") || + n.equals_insensitive("posix_memalign") || + n.equals_insensitive("valloc") || n.equals_insensitive("pvalloc") || + n.equals_insensitive("mmap")) { return true; } else { return false; @@ -287,7 +298,8 @@ class AnalysisPass : public ModulePass { } bool isFreeFn(StringRef &n) { - if (n.equals("free") || n.equals("cfree") || n.equals("munmap")) { + if (n.equals_insensitive("free") || n.equals_insensitive("cfree") || + n.equals_insensitive("munmap")) { return true; } else { return false; @@ -304,11 +316,14 @@ class AnalysisPass : public ModulePass { // operator new(unsigned long, std::align_val_t) // operator new(unsigned long, std::align_val_t, std::nothrow_t const&) - if (n.equals("_Znam") || n.equals("_ZnamRKSt9nothrow_t") || - n.equals("_ZnamSt11align_val_t") || - n.equals("_ZnamSt11align_val_tRKSt9nothrow_t") || n.equals("_Znwm") || - n.equals("_ZnwmRKSt9nothrow_t") || n.equals("_ZnwmSt11align_val_t") || - n.equals("_ZnwmSt11align_val_tRKSt9nothrow_t")) { + if (n.equals_insensitive("_Znam") || + n.equals_insensitive("_ZnamRKSt9nothrow_t") || + n.equals_insensitive("_ZnamSt11align_val_t") || + n.equals_insensitive("_ZnamSt11align_val_tRKSt9nothrow_t") || + n.equals_insensitive("_Znwm") || + n.equals_insensitive("_ZnwmRKSt9nothrow_t") || + n.equals_insensitive("_ZnwmSt11align_val_t") || + n.equals_insensitive("_ZnwmSt11align_val_tRKSt9nothrow_t")) { return true; } else { return false; @@ -329,13 +344,16 @@ class AnalysisPass : public ModulePass { // operator delete(void*, std::align_val_t) // operator delete(void*, std::align_val_t, std::nothrow_t const&) - if (n.equals("_ZdaPv") || n.equals("_ZdaPvm") || - n.equals("_ZdaPvmSt11align_val_t") || - n.equals("_ZdaPvRKSt9nothrow_t") || n.equals("_ZdaPvSt11align_val_t") || - n.equals("_ZdaPvSt11align_val_tRKSt9nothrow_t") || n.equals("_ZdlPv") || - n.equals("_ZdlPvm") || n.equals("_ZdlPvmSt11align_val_t") || - n.equals("_ZdlPvRKSt9nothrow_t") || n.equals("_ZdlPvSt11align_val_t") || - n.equals("_ZdlPvSt11align_val_tRKSt9nothrow_t") + if (n.equals_insensitive("_ZdaPv") || n.equals_insensitive("_ZdaPvm") || + n.equals_insensitive("_ZdaPvmSt11align_val_t") || + n.equals_insensitive("_ZdaPvRKSt9nothrow_t") || + n.equals_insensitive("_ZdaPvSt11align_val_t") || + n.equals_insensitive("_ZdaPvSt11align_val_tRKSt9nothrow_t") || + n.equals_insensitive("_ZdlPv") || n.equals_insensitive("_ZdlPvm") || + n.equals_insensitive("_ZdlPvmSt11align_val_t") || + n.equals_insensitive("_ZdlPvRKSt9nothrow_t") || + n.equals_insensitive("_ZdlPvSt11align_val_t") || + n.equals_insensitive("_ZdlPvSt11align_val_tRKSt9nothrow_t") ) { return true; @@ -358,14 +376,14 @@ llvmGetPassPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "AnalysisPass", "v0.1", /* lambda to insert our pass into the pass pipeline. */ [](PassBuilder &PB) { - - #if LLVM_VERSION_MAJOR <= 13 - using OptimizationLevel = typename PassBuilder::OptimizationLevel; - #endif PB.registerOptimizerLastEPCallback( - [](ModulePassManager &MPM, OptimizationLevel OL) { - MPM.addPass(AnalysisPass()); - }); + [](ModulePassManager &MPM, OptimizationLevel OL + #if LLVM_VERSION_MAJOR >= 20 + , + ThinOrFullLTOPhase Phase + #endif + + ) { MPM.addPass(AnalysisPass()); }); }}; } #else