summaryrefslogtreecommitdiff
path: root/libre/clamav/Add-support-for-LLVM-3.8.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/clamav/Add-support-for-LLVM-3.8.patch')
-rw-r--r--libre/clamav/Add-support-for-LLVM-3.8.patch457
1 files changed, 0 insertions, 457 deletions
diff --git a/libre/clamav/Add-support-for-LLVM-3.8.patch b/libre/clamav/Add-support-for-LLVM-3.8.patch
deleted file mode 100644
index 1d421b3a0..000000000
--- a/libre/clamav/Add-support-for-LLVM-3.8.patch
+++ /dev/null
@@ -1,457 +0,0 @@
-From 3111db3d1a3f2b20a007673f69a53ad69afec2f8 Mon Sep 17 00:00:00 2001
-From: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
-Date: Fri, 14 Oct 2016 20:24:48 +0200
-Subject: Add support for LLVM 3.8
-
-Main changes:
-llvm/Config/config.h was removed.
-The ScalarEvolution pass is now a WrapperPass.
-Iterators are no longer automatically converted to and from pointers.
-The GVNPass causes the test_bswap_jit test to fail; replaced with
-ConstantPropagationPass.
-LLVMIsMultithreaded is from the C API, while llvm_is_multithreaded is
-the corresponding C++ API.
-
-Patch-Name: Add-support-for-LLVM-3.8.patch
----
- libclamav/c++/ClamBCRTChecks.cpp | 50 ++++++++++++++++++++++++++++++
- libclamav/c++/PointerTracking.cpp | 12 ++++++++
- libclamav/c++/bytecode2llvm.cpp | 65 +++++++++++++++++++++++++++++++--------
- libclamav/c++/detect.cpp | 2 ++
- libclamav/c++/m4/llvm-flags.m4 | 4 +--
- 5 files changed, 119 insertions(+), 14 deletions(-)
-
-diff --git a/libclamav/c++/ClamBCRTChecks.cpp b/libclamav/c++/ClamBCRTChecks.cpp
-index 35f7272..a254c40 100644
---- a/libclamav/c++/ClamBCRTChecks.cpp
-+++ b/libclamav/c++/ClamBCRTChecks.cpp
-@@ -54,7 +54,9 @@
- #include "llvm/Analysis/ScalarEvolution.h"
- #include "llvm/Analysis/ScalarEvolutionExpressions.h"
- #include "llvm/Analysis/ScalarEvolutionExpander.h"
-+#if LLVM_VERSION < 38
- #include "llvm/Config/config.h"
-+#endif
- #include "llvm/Pass.h"
- #include "llvm/Support/CommandLine.h"
- #if LLVM_VERSION < 35
-@@ -207,7 +209,11 @@ namespace llvm {
- #else
- TD = &F.getEntryBlock().getModule()->getDataLayout();
- #endif
-+#if LLVM_VERSION < 38
- SE = &getAnalysis<ScalarEvolution>();
-+#else
-+ SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
-+#endif
- PT = &getAnalysis<PointerTracking>();
- #if LLVM_VERSION < 35
- DT = &getAnalysis<DominatorTree>();
-@@ -332,7 +338,11 @@ namespace llvm {
- AbrtC->setDoesNotThrow();
- #endif
- // remove all instructions from entry
-+#if LLVM_VERSION < 38
- BasicBlock::iterator BBI = I, BBE=BB->end();
-+#else
-+ BasicBlock::iterator BBI = I->getIterator(), BBE=BB->end();
-+#endif
- while (BBI != BBE) {
- if (!BBI->use_empty())
- BBI->replaceAllUsesWith(UndefValue::get(BBI->getType()));
-@@ -367,7 +377,11 @@ namespace llvm {
- #else
- AU.addRequired<DominatorTreeWrapperPass>();
- #endif
-+#if LLVM_VERSION < 38
- AU.addRequired<ScalarEvolution>();
-+#else
-+ AU.addRequired<ScalarEvolutionWrapperPass>();
-+#endif
- AU.addRequired<PointerTracking>();
- #if LLVM_VERSION < 35
- AU.addRequired<CallGraph>();
-@@ -398,9 +412,17 @@ namespace llvm {
-
- Instruction *getInsertPoint(Value *V)
- {
-+#if LLVM_VERSION < 38
- BasicBlock::iterator It = EP;
-+#else
-+ BasicBlock::iterator It = EP->getIterator();
-+#endif
- if (Instruction *I = dyn_cast<Instruction>(V)) {
-+#if LLVM_VERSION < 38
- It = I;
-+#else
-+ It = I->getIterator();
-+#endif
- ++It;
- }
- return &*It;
-@@ -427,7 +449,11 @@ namespace llvm {
- constType *P8Ty =
- PointerType::getUnqual(Type::getInt8Ty(Ptr->getContext()));
- if (PHINode *PN = dyn_cast<PHINode>(Ptr)) {
-+#if LLVM_VERSION < 38
- BasicBlock::iterator It = PN;
-+#else
-+ BasicBlock::iterator It = PN->getIterator();
-+#endif
- ++It;
- PHINode *newPN = PHINode::Create(P8Ty, HINT(PN->getNumIncomingValues()) ".verif.base", &*It);
- Changed = true;
-@@ -441,7 +467,11 @@ namespace llvm {
- return newPN;
- }
- if (SelectInst *SI = dyn_cast<SelectInst>(Ptr)) {
-+#if LLVM_VERSION < 38
- BasicBlock::iterator It = SI;
-+#else
-+ BasicBlock::iterator It = SI->getIterator();
-+#endif
- ++It;
- Value *TrueB = getPointerBase(SI->getTrueValue());
- Value *FalseB = getPointerBase(SI->getFalseValue());
-@@ -552,7 +582,11 @@ namespace llvm {
- }
- #endif
- if (PHINode *PN = dyn_cast<PHINode>(Base)) {
-+#if LLVM_VERSION < 38
- BasicBlock::iterator It = PN;
-+#else
-+ BasicBlock::iterator It = PN->getIterator();
-+#endif
- ++It;
- PHINode *newPN = PHINode::Create(I64Ty, HINT(PN->getNumIncomingValues()) ".verif.bounds", &*It);
- Changed = true;
-@@ -575,7 +609,11 @@ namespace llvm {
- return BoundsMap[Base] = newPN;
- }
- if (SelectInst *SI = dyn_cast<SelectInst>(Base)) {
-+#if LLVM_VERSION < 38
- BasicBlock::iterator It = SI;
-+#else
-+ BasicBlock::iterator It = SI->getIterator();
-+#endif
- ++It;
- Value *TrueB = getPointerBounds(SI->getTrueValue());
- Value *FalseB = getPointerBounds(SI->getFalseValue());
-@@ -632,7 +670,11 @@ namespace llvm {
- if (!MDDbgKind)
- return 0;
- Approximate = true;
-+#if LLVM_VERSION < 38
- BasicBlock::iterator It = I;
-+#else
-+ BasicBlock::iterator It = I->getIterator();
-+#endif
- while (It != I->getParent()->begin()) {
- --It;
- if (MDNode *Dbg = It->getMetadata(MDDbgKind))
-@@ -666,7 +708,11 @@ namespace llvm {
- return false;
- }
- BasicBlock *BB = I->getParent();
-+#if LLVM_VERSION < 38
- BasicBlock::iterator It = I;
-+#else
-+ BasicBlock::iterator It = I->getIterator();
-+#endif
- #if LLVM_VERSION < 37
- BasicBlock *newBB = SplitBlock(BB, &*It, this);
- #else
-@@ -949,7 +995,11 @@ INITIALIZE_PASS_DEPENDENCY(DominatorTree)
- #else
- INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
- #endif
-+#if LLVM_VERSION < 38
- INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
-+#else
-+INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)
-+#endif
- #if LLVM_VERSION < 34
- INITIALIZE_AG_DEPENDENCY(CallGraph)
- #elif LLVM_VERSION < 35
-diff --git a/libclamav/c++/PointerTracking.cpp b/libclamav/c++/PointerTracking.cpp
-index 67340e8..ad5b93f 100644
---- a/libclamav/c++/PointerTracking.cpp
-+++ b/libclamav/c++/PointerTracking.cpp
-@@ -79,7 +79,11 @@ INITIALIZE_PASS_DEPENDENCY(LoopInfo)
- #else
- INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
- #endif
-+#if LLVM_VERSION < 38
- INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
-+#else
-+INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)
-+#endif
- #if LLVM_VERSION < 35
- INITIALIZE_PASS_DEPENDENCY(DominatorTree)
- #else
-@@ -110,7 +114,11 @@ bool PointerTracking::runOnFunction(Function &F) {
- #else
- TD = &F.getEntryBlock().getModule()->getDataLayout();
- #endif
-+#if LLVM_VERSION < 38
- SE = &getAnalysis<ScalarEvolution>();
-+#else
-+ SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
-+#endif
- #if LLVM_VERSION < 37
- LI = &getAnalysis<LoopInfo>();
- #else
-@@ -135,7 +143,11 @@ void PointerTracking::getAnalysisUsage(AnalysisUsage &AU) const {
- #else
- AU.addRequiredTransitive<LoopInfoWrapperPass>();
- #endif
-+#if LLVM_VERSION < 38
- AU.addRequiredTransitive<ScalarEvolution>();
-+#else
-+ AU.addRequiredTransitive<ScalarEvolutionWrapperPass>();
-+#endif
- AU.setPreservesAll();
- }
-
-diff --git a/libclamav/c++/bytecode2llvm.cpp b/libclamav/c++/bytecode2llvm.cpp
-index 2171993..213847c 100644
---- a/libclamav/c++/bytecode2llvm.cpp
-+++ b/libclamav/c++/bytecode2llvm.cpp
-@@ -170,7 +170,9 @@ void LLVMInitializePowerPCAsmPrinter();
- //#define TIMING
- #undef TIMING
-
-+#if LLVM_VERSION < 38
- #include "llvm/Config/config.h"
-+#endif
- #ifdef ENABLE_THREADS
- #if !ENABLE_THREADS
- #error "Thread support was explicitly disabled. Cannot continue"
-@@ -729,7 +731,11 @@ class RuntimeLimits : public FunctionPass {
- #else
- LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
- #endif
-+#if LLVM_VERSION < 38
- ScalarEvolution &SE = getAnalysis<ScalarEvolution>();
-+#else
-+ ScalarEvolution &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE();
-+#endif
-
- // Now check whether any of these backedge targets are part of a loop
- // with a small constant trip count
-@@ -783,7 +789,11 @@ class RuntimeLimits : public FunctionPass {
- new UnreachableInst(F.getContext(), AbrtBB);
- IRBuilder<false> Builder(F.getContext());
-
-+#if LLVM_VERSION < 38
- Value *Flag = F.arg_begin();
-+#else
-+ Value *Flag = &*F.arg_begin();
-+#endif
- #if LLVM_VERSION < 30
- Function *LSBarrier = Intrinsic::getDeclaration(F.getParent(),
- Intrinsic::memory_barrier);
-@@ -797,13 +807,21 @@ class RuntimeLimits : public FunctionPass {
- #endif
- verifyFunction(F);
- BasicBlock *BB = &F.getEntryBlock();
-+#if LLVM_VERSION < 38
- Builder.SetInsertPoint(BB, BB->getTerminator());
-+#else
-+ Builder.SetInsertPoint(BB, BB->getTerminator()->getIterator());
-+#endif
- Flag = Builder.CreatePointerCast(Flag, PointerType::getUnqual(
- Type::getInt1Ty(F.getContext())));
- for (BBSetTy::iterator I=needsTimeoutCheck.begin(),
- E=needsTimeoutCheck.end(); I != E; ++I) {
- BasicBlock *BB = *I;
-+#if LLVM_VERSION < 38
- Builder.SetInsertPoint(BB, BB->getTerminator());
-+#else
-+ Builder.SetInsertPoint(BB, BB->getTerminator()->getIterator());
-+#endif
- #if LLVM_VERSION < 30
- // store-load barrier: will be a no-op on x86 but not other arches
- Builder.CreateCall(LSBarrier, ARRAYREF(Value*, MBArgs, MBArgs+5));
-@@ -842,7 +860,11 @@ class RuntimeLimits : public FunctionPass {
- #else
- AU.addRequired<LoopInfoWrapperPass>();
- #endif
-+#if LLVM_VERSION < 38
- AU.addRequired<ScalarEvolution>();
-+#else
-+ AU.addRequired<ScalarEvolutionWrapperPass>();
-+#endif
- #if LLVM_VERSION < 35
- AU.addRequired<DominatorTree>();
- #else
-@@ -1157,8 +1179,10 @@ class LLVMCodegen {
- Folder(EE->getTargetData()), Builder(Context, Folder), Values(), CF(CF) {
- #elif LLVM_VERSION < 37
- Folder(EE->getDataLayout()), Builder(Context, Folder), Values(), CF(CF) {
--#else
-+#elif LLVM_VERSION < 38
- Folder(*EE->getDataLayout()), Builder(Context, Folder), Values(), CF(CF) {
-+#else
-+ Folder(EE->getDataLayout()), Builder(Context, Folder), Values(), CF(CF) {
- #endif
-
- for (unsigned i=0;i<cli_apicall_maxglobal - _FIRST_GLOBAL;i++) {
-@@ -1319,8 +1343,10 @@ class LLVMCodegen {
- }
- #if LLVM_VERSION < 32
- if (EE->getTargetData()->getPointerSize() == 8) {
--#else
-+#elif LLVM_VERSION < 38
- if (EE->getDataLayout()->getPointerSize() == 8) {
-+#else
-+ if (EE->getDataLayout().getPointerSize() == 8) {
- #endif
- // eliminate useless trunc, GEP can take i64 too
- if (TruncInst *I = dyn_cast<TruncInst>(V)) {
-@@ -1440,7 +1466,11 @@ class LLVMCodegen {
- numArgs = func->numArgs;
-
- if (FakeGVs.any()) {
-+#if LLVM_VERSION < 38
- Argument *Ctx = F->arg_begin();
-+#else
-+ Argument *Ctx = &*F->arg_begin();
-+#endif
- for (unsigned i=0;i<bc->num_globals;i++) {
- if (!FakeGVs[i])
- continue;
-@@ -1888,8 +1918,10 @@ class LLVMCodegen {
- Src = Builder.CreatePointerCast(Src, PointerType::getUnqual(Type::getInt8Ty(Context)));
- #if LLVM_VERSION < 32
- Value *Len = convertOperand(func, EE->getTargetData()->getIntPtrType(Context), inst->u.three[2]);
--#else
-+#elif LLVM_VERSION < 38
- Value *Len = convertOperand(func, EE->getDataLayout()->getIntPtrType(Context), inst->u.three[2]);
-+#else
-+ Value *Len = convertOperand(func, EE->getDataLayout().getIntPtrType(Context), inst->u.three[2]);
- #endif
- #if LLVM_VERSION < 37
- CallInst *c = Builder.CreateCall3(CF->FRealmemcmp, Dst, Src, Len);
-@@ -2028,6 +2060,7 @@ class LLVMCodegen {
- PMUnsigned.run(*F);
- PMUnsigned.doFinalization();
- }
-+
- apiMap.pmTimer.stopTimer();
- apiMap.irgenTimer.startTimer();
- }
-@@ -2260,8 +2293,10 @@ static void addFunctionProtos(struct CommonFunctions *CF, ExecutionEngine *EE, M
- args.push_back(PointerType::getUnqual(Type::getInt8Ty(Context)));
- #if LLVM_VERSION < 32
- args.push_back(EE->getTargetData()->getIntPtrType(Context));
--#else
-+#elif LLVM_VERSION < 38
- args.push_back(EE->getDataLayout()->getIntPtrType(Context));
-+#else
-+ args.push_back(EE->getDataLayout().getIntPtrType(Context));
- #endif
- FuncTy_5 = FunctionType::get(Type::getInt32Ty(Context),
- args, false);
-@@ -2282,7 +2317,11 @@ INITIALIZE_PASS_DEPENDENCY(LoopInfo)
- #else
- INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
- #endif
-+#if LLVM_VERSION < 38
- INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
-+#else
-+INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)
-+#endif
- #if LLVM_VERSION < 35
- INITIALIZE_PASS_DEPENDENCY(DominatorTree)
- #else
-@@ -2609,8 +2648,10 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
- #endif
- #if LLVM_VERSION < 32
- M->setDataLayout(EE->getTargetData()->getStringRepresentation());
--#else
-+#elif LLVM_VERSION < 38
- M->setDataLayout(EE->getDataLayout()->getStringRepresentation());
-+#else
-+ M->setDataLayout(EE->getDataLayout().getStringRepresentation());
- #endif
- #if LLVM_VERSION < 31
- M->setTargetTriple(sys::getHostTriple());
-@@ -2767,7 +2808,11 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
- // TODO: only run this on the untrusted bytecodes, not all of them...
- if (has_untrusted)
- PM.add(createClamBCRTChecks());
--#if LLVM_VERSION >= 36
-+#if LLVM_VERSION >= 38
-+ // With LLVM 3.8 the test_bswap_jit test fails with the GVNPass enabled.
-+ // To prevent the segfaults mentioned below, replace it with the ConstantPropagationPass.
-+ PM.add(createConstantPropagationPass());
-+#elif LLVM_VERSION >= 36
- // With LLVM 3.6 (MCJIT) this Pass is required to work around
- // a crash in LLVM caused by the SCCP Pass:
- // Pass 'Sparse Conditional Constant Propagation' is not initialized.
-@@ -2841,7 +2886,7 @@ int bytecode_init(void)
- return CL_EARG;
- }
- #else
-- if (!LLVMIsMultithreaded()) {
-+ if (!llvm_is_multithreaded()) {
- cli_warnmsg("bytecode_init: LLVM is compiled without multithreading support\n");
- }
- #endif
-@@ -2890,11 +2935,7 @@ int bytecode_init(void)
- InitializeAllTargets();
- #endif
-
--#if LLVM_VERSION < 35
- if (!llvm_is_multithreaded()) {
--#else
-- if (!LLVMIsMultithreaded()) {
--#endif
- //TODO:cli_dbgmsg
- DEBUG(errs() << "WARNING: ClamAV JIT built w/o atomic builtins\n"
- << "On x86 for best performance ClamAV should be built for i686, not i386!\n");
-@@ -3113,7 +3154,7 @@ static Metadata *findDbgSubprogramDeclare(Function *V) {
- MDNode *DIG = NMD->getOperand(i);
- if (!DISubprogram::classof(DIG))
- continue;
-- if ((cast<DISubprogram>(DIG))->getFunction() == V)
-+ if ((cast<DISubprogram>(DIG))->describes(V))
- return DIG;
- #endif
- }
-diff --git a/libclamav/c++/detect.cpp b/libclamav/c++/detect.cpp
-index 17348af..95ba2f7 100644
---- a/libclamav/c++/detect.cpp
-+++ b/libclamav/c++/detect.cpp
-@@ -22,7 +22,9 @@
- */
-
- #include "llvm/ADT/Triple.h"
-+#if LLVM_VERSION < 38
- #include "llvm/Config/config.h"
-+#endif
- #include "llvm/Support/raw_ostream.h"
- #if LLVM_VERSION < 29
- #include "llvm/System/DataTypes.h"
-diff --git a/libclamav/c++/m4/llvm-flags.m4 b/libclamav/c++/m4/llvm-flags.m4
-index 04d6833..345c7ae 100644
---- a/libclamav/c++/m4/llvm-flags.m4
-+++ b/libclamav/c++/m4/llvm-flags.m4
-@@ -98,14 +98,14 @@ elif test $llvmver_test -lt 290; then
- elif test $llvmver_test -lt 360; then
- llvmcomp="jit nativecodegen scalaropts ipo"
- AC_MSG_RESULT([ok ($llvmver)])
--elif test $llvmver_test -lt 380; then
-+elif test $llvmver_test -lt 390; then
- dnl LLVM 3.6.0 removed jit, so we have to use mcjit
- dnl and we're using InitializeNativeTargetAsmParser, so we need the architecture specific parsers
- llvmcomp="mcjit nativecodegen scalaropts ipo x86asmparser powerpcasmparser"
- AC_MSG_RESULT([ok ($llvmver)])
- else
- AC_MSG_RESULT([no ($llvmver)])
-- AC_MSG_ERROR([LLVM < 3.8 required, but "$llvmver"($llvmver_test) found])
-+ AC_MSG_ERROR([LLVM < 3.9 required, but "$llvmver"($llvmver_test) found])
- fi
-
- dnl aquire the required flags to properly link in external LLVM