up to 1.4.0+20180920
OBS-URL: https://build.opensuse.org/package/show/devel:tools:statica/klee?expand=0&rev=56
This commit is contained in:
parent
51b6157cc6
commit
611b54d753
@ -1,295 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Wed, 22 Feb 2017 15:57:55 +0100
|
||||
Subject: llvm: make KLEE compile against LLVM 3.9
|
||||
Patch-mainline: no
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
lib/Core/Executor.cpp | 16 ++++++++++++++++
|
||||
lib/Core/MemoryManager.cpp | 5 ++++-
|
||||
lib/Module/ModuleUtil.cpp | 33 ++++++++++++++++++++++++++++++---
|
||||
lib/Module/Optimize.cpp | 34 ++++++++++++++++++++++++++++++++++
|
||||
lib/Module/RaiseAsm.cpp | 10 +++++++++-
|
||||
tools/kleaver/main.cpp | 4 ++++
|
||||
tools/klee/main.cpp | 4 ++++
|
||||
7 files changed, 101 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
|
||||
index b053d4882431..7f69a618b8ec 100644
|
||||
--- a/lib/Core/Executor.cpp
|
||||
+++ b/lib/Core/Executor.cpp
|
||||
@@ -1338,10 +1338,18 @@ void Executor::executeCall(ExecutionState &state,
|
||||
//
|
||||
// Alignment requirements for scalar types is the same as their size
|
||||
if (argWidth > Expr::Int64) {
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ size = llvm::alignTo(size, 16);
|
||||
+#else
|
||||
size = llvm::RoundUpToAlignment(size, 16);
|
||||
+#endif
|
||||
requires16ByteAlignment = true;
|
||||
}
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ size += llvm::alignTo(argWidth, WordSize) / 8;
|
||||
+#else
|
||||
size += llvm::RoundUpToAlignment(argWidth, WordSize) / 8;
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1374,10 +1382,18 @@ void Executor::executeCall(ExecutionState &state,
|
||||
|
||||
Expr::Width argWidth = arguments[i]->getWidth();
|
||||
if (argWidth > Expr::Int64) {
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ offset = llvm::alignTo(offset, 16);
|
||||
+#else
|
||||
offset = llvm::RoundUpToAlignment(offset, 16);
|
||||
+#endif
|
||||
}
|
||||
os->write(offset, arguments[i]);
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ offset += llvm::alignTo(argWidth, WordSize) / 8;
|
||||
+#else
|
||||
offset += llvm::RoundUpToAlignment(argWidth, WordSize) / 8;
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/lib/Core/MemoryManager.cpp b/lib/Core/MemoryManager.cpp
|
||||
index 24e2ed97581f..f40e8bc9deb8 100644
|
||||
--- a/lib/Core/MemoryManager.cpp
|
||||
+++ b/lib/Core/MemoryManager.cpp
|
||||
@@ -111,9 +111,12 @@ MemoryObject *MemoryManager::allocate(uint64_t size, bool isLocal,
|
||||
|
||||
uint64_t address = 0;
|
||||
if (DeterministicAllocation) {
|
||||
-
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ address = llvm::alignTo((uint64_t)nextFreeSlot + alignment - 1, alignment);
|
||||
+#else
|
||||
address = llvm::RoundUpToAlignment((uint64_t)nextFreeSlot + alignment - 1,
|
||||
alignment);
|
||||
+#endif
|
||||
|
||||
// Handle the case of 0-sized allocations as 1-byte allocations.
|
||||
// This way, we make sure we have this allocation between its own red zones
|
||||
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
|
||||
index 5ca0a55b12d2..0e87b5a6deca 100644
|
||||
--- a/lib/Module/ModuleUtil.cpp
|
||||
+++ b/lib/Module/ModuleUtil.cpp
|
||||
@@ -284,7 +284,11 @@ Function *klee::getDirectCallTarget(CallSite cs, bool moduleIsFullyLinked) {
|
||||
if (Function *f = dyn_cast<Function>(v)) {
|
||||
return f;
|
||||
} else if (llvm::GlobalAlias *ga = dyn_cast<GlobalAlias>(v)) {
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ if (moduleIsFullyLinked || !(ga->isInterposable())) {
|
||||
+#else
|
||||
if (moduleIsFullyLinked || !(ga->mayBeOverridden())) {
|
||||
+#endif
|
||||
v = ga->getAliasee();
|
||||
} else {
|
||||
v = NULL;
|
||||
@@ -393,7 +397,13 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
}
|
||||
|
||||
if (magic == sys::fs::file_magic::archive) {
|
||||
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ Expected<std::unique_ptr<object::Binary> > archOwner =
|
||||
+ object::createBinary(Buffer, &context);
|
||||
+ if (!archOwner)
|
||||
+ ec = errorToErrorCode(archOwner.takeError());
|
||||
+ llvm::object::Binary *arch = archOwner.get().get();
|
||||
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
|
||||
ErrorOr<std::unique_ptr<object::Binary>> archOwner =
|
||||
object::createBinary(Buffer, &context);
|
||||
ec = archOwner.getError();
|
||||
@@ -414,7 +424,12 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
|
||||
if (auto archive = dyn_cast<object::Archive>(arch)) {
|
||||
// Load all bitcode files into memory
|
||||
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ Error Err;
|
||||
+ for (object::Archive::child_iterator AI = archive->child_begin(Err),
|
||||
+ AE = archive->child_end();
|
||||
+ AI != AE; ++AI)
|
||||
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
|
||||
for (object::Archive::child_iterator AI = archive->child_begin(),
|
||||
AE = archive->child_end();
|
||||
AI != AE; ++AI)
|
||||
@@ -455,7 +470,12 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
return false;
|
||||
}
|
||||
|
||||
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ Expected<std::unique_ptr<llvm::object::Binary> > child =
|
||||
+ childOrErr->getAsBinary();
|
||||
+ if (!child)
|
||||
+ ec = errorToErrorCode(child.takeError());
|
||||
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
|
||||
ErrorOr<std::unique_ptr<llvm::object::Binary>> child =
|
||||
childOrErr->getAsBinary();
|
||||
ec = child.getError();
|
||||
@@ -519,7 +539,14 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
return false;
|
||||
}
|
||||
}
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ if (Err) {
|
||||
+ errorMsg = "Cannot iterate over archive";
|
||||
+ return false;
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
+
|
||||
return true;
|
||||
}
|
||||
if (magic.is_object()) {
|
||||
diff --git a/lib/Module/Optimize.cpp b/lib/Module/Optimize.cpp
|
||||
index c788ee36cadb..34af46262080 100644
|
||||
--- a/lib/Module/Optimize.cpp
|
||||
+++ b/lib/Module/Optimize.cpp
|
||||
@@ -39,6 +39,11 @@
|
||||
#include "llvm/Analysis/GlobalsModRef.h"
|
||||
#endif
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+#include "llvm/Transforms/IPO/FunctionAttrs.h"
|
||||
+#include "llvm/Transforms/Scalar/GVN.h"
|
||||
+#endif
|
||||
+
|
||||
using namespace llvm;
|
||||
|
||||
// Don't verify at the end
|
||||
@@ -107,7 +112,11 @@ static void AddStandardCompilePasses(klee::LegacyLLVMPassManagerTy &PM) {
|
||||
|
||||
addPass(PM, createPruneEHPass()); // Remove dead EH info
|
||||
#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ addPass(PM, createPostOrderFunctionAttrsLegacyPass());
|
||||
+#else
|
||||
addPass(PM, createPostOrderFunctionAttrsPass());
|
||||
+#endif
|
||||
addPass(PM, createReversePostOrderFunctionAttrsPass()); // Deduce function attrs
|
||||
#else
|
||||
addPass(PM, createFunctionAttrsPass()); // Deduce function attrs
|
||||
@@ -120,7 +129,11 @@ static void AddStandardCompilePasses(klee::LegacyLLVMPassManagerTy &PM) {
|
||||
addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
|
||||
addPass(PM, createJumpThreadingPass()); // Thread jumps.
|
||||
addPass(PM, createCFGSimplificationPass()); // Merge & remove BBs
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ addPass(PM, createSROAPass()); // Break up aggregate allocas
|
||||
+#else
|
||||
addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
|
||||
+#endif
|
||||
addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
|
||||
|
||||
addPass(PM, createTailCallEliminationPass()); // Eliminate tail calls
|
||||
@@ -183,7 +196,20 @@ void Optimize(Module *M, llvm::ArrayRef<const char *> preservedFunctions) {
|
||||
// for a main function. If main is defined, mark all other functions
|
||||
// internal.
|
||||
if (!DisableInternalize) {
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ auto PreserveFunctions = [=](const GlobalValue &GV) {
|
||||
+ StringRef GVName = GV.getName();
|
||||
+
|
||||
+ for (const char *fun: preservedFunctions)
|
||||
+ if (GVName.equals(fun))
|
||||
+ return true;
|
||||
+
|
||||
+ return false;
|
||||
+ };
|
||||
+ ModulePass *pass = createInternalizePass(PreserveFunctions);
|
||||
+#else
|
||||
ModulePass *pass = createInternalizePass(preservedFunctions);
|
||||
+#endif
|
||||
addPass(Passes, pass);
|
||||
}
|
||||
|
||||
@@ -222,11 +248,19 @@ void Optimize(Module *M, llvm::ArrayRef<const char *> preservedFunctions) {
|
||||
// The IPO passes may leave cruft around. Clean up after them.
|
||||
addPass(Passes, createInstructionCombiningPass());
|
||||
addPass(Passes, createJumpThreadingPass()); // Thread jumps.
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ addPass(Passes, createSROAPass()); // Break up allocas
|
||||
+#else
|
||||
addPass(Passes, createScalarReplAggregatesPass()); // Break up allocas
|
||||
+#endif
|
||||
|
||||
// Run a few AA driven optimizations here and now, to cleanup the code.
|
||||
#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ addPass(Passes, createPostOrderFunctionAttrsLegacyPass());
|
||||
+#else
|
||||
addPass(Passes, createPostOrderFunctionAttrsPass());
|
||||
+#endif
|
||||
addPass(Passes, createReversePostOrderFunctionAttrsPass()); // Add nocapture
|
||||
addPass(Passes, createGlobalsAAWrapperPass()); // IP alias analysis
|
||||
#else
|
||||
diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp
|
||||
index c597fa2a7b82..4967a2fa8578 100644
|
||||
--- a/lib/Module/RaiseAsm.cpp
|
||||
+++ b/lib/Module/RaiseAsm.cpp
|
||||
@@ -60,7 +60,11 @@ bool RaiseAsmPass::runOnInstruction(Module &M, Instruction *I) {
|
||||
|
||||
if (ia->getAsmString() == "" && ia->hasSideEffects()) {
|
||||
IRBuilder<> Builder(I);
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ Builder.CreateFence(llvm::AtomicOrdering::SequentiallyConsistent);
|
||||
+#else
|
||||
Builder.CreateFence(llvm::SequentiallyConsistent);
|
||||
+#endif
|
||||
I->eraseFromParent();
|
||||
return true;
|
||||
}
|
||||
@@ -81,7 +85,11 @@ bool RaiseAsmPass::runOnModule(Module &M) {
|
||||
klee_warning("Warning: unable to select native target: %s", Err.c_str());
|
||||
TLI = 0;
|
||||
} else {
|
||||
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ TM = NativeTarget->createTargetMachine(HostTriple, "", "", TargetOptions(),
|
||||
+ None);
|
||||
+ TLI = TM->getSubtargetImpl(*(M.begin()))->getTargetLowering();
|
||||
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
|
||||
TM = NativeTarget->createTargetMachine(HostTriple, "", "", TargetOptions());
|
||||
TLI = TM->getSubtargetImpl(*(M.begin()))->getTargetLowering();
|
||||
#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
|
||||
diff --git a/tools/kleaver/main.cpp b/tools/kleaver/main.cpp
|
||||
index b8b32e31264a..800cece95e9c 100644
|
||||
--- a/tools/kleaver/main.cpp
|
||||
+++ b/tools/kleaver/main.cpp
|
||||
@@ -400,7 +400,11 @@ static bool printInputAsSMTLIBv2(const char *Filename,
|
||||
int main(int argc, char **argv) {
|
||||
bool success = true;
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
|
||||
+#else
|
||||
llvm::sys::PrintStackTraceOnErrorSignal();
|
||||
+#endif
|
||||
llvm::cl::SetVersionPrinter(klee::printVersion);
|
||||
llvm::cl::ParseCommandLineOptions(argc, argv);
|
||||
|
||||
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
|
||||
index c655aa560f62..7be5f07cdc0e 100644
|
||||
--- a/tools/klee/main.cpp
|
||||
+++ b/tools/klee/main.cpp
|
||||
@@ -1092,7 +1092,11 @@ int main(int argc, char **argv, char **envp) {
|
||||
llvm::InitializeNativeTarget();
|
||||
|
||||
parseArguments(argc, argv);
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
+ sys::PrintStackTraceOnErrorSignal(argv[0]);
|
||||
+#else
|
||||
sys::PrintStackTraceOnErrorSignal();
|
||||
+#endif
|
||||
|
||||
if (Watchdog) {
|
||||
if (MaxTime==0) {
|
||||
--
|
||||
2.18.0
|
||||
|
36
0001-llvm5-avoid-on-function-arg_begin.patch
Normal file
36
0001-llvm5-avoid-on-function-arg_begin.patch
Normal file
@ -0,0 +1,36 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 10:35:19 +0100
|
||||
Subject: llvm5: avoid ++ on function->arg_begin()
|
||||
Patch-mainline: no
|
||||
|
||||
Starting with llvm 5, arguments of a function are not an iterator, but
|
||||
an array. So they cannot be incremented in-place. Add a local auto
|
||||
variable and increment that.
|
||||
|
||||
Otherwise we see:
|
||||
../tools/klee/main.cpp:661:23: error: expression is not assignable
|
||||
Value *oldArgv = &*(++mainFn->arg_begin());
|
||||
^ ~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
tools/klee/main.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
|
||||
index 1de5fbeb7e0e..3be619138bd6 100644
|
||||
--- a/tools/klee/main.cpp
|
||||
+++ b/tools/klee/main.cpp
|
||||
@@ -1036,7 +1036,8 @@ createLibCWrapper(std::vector<std::unique_ptr<llvm::Module>> &modules,
|
||||
args.push_back(
|
||||
llvm::ConstantExpr::getBitCast(inModuleRefernce, ft->getParamType(0)));
|
||||
args.push_back(&*(stub->arg_begin())); // argc
|
||||
- args.push_back(&*(++stub->arg_begin())); // argv
|
||||
+ auto arg_it = stub->arg_begin();
|
||||
+ args.push_back(&*(++arg_it)); // argv
|
||||
args.push_back(Constant::getNullValue(ft->getParamType(3))); // app_init
|
||||
args.push_back(Constant::getNullValue(ft->getParamType(4))); // app_fini
|
||||
args.push_back(Constant::getNullValue(ft->getParamType(5))); // rtld_fini
|
||||
--
|
||||
2.19.0
|
||||
|
@ -1,38 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Fri, 25 May 2018 15:17:03 +0200
|
||||
Subject: cmake: find_llvm, fix libraries with llvm-config 3.9
|
||||
Patch-mainline: no
|
||||
|
||||
llvm-config from llvm 3.9 was broken. Fix handling of improperly
|
||||
returned libraries.
|
||||
From:
|
||||
liblibLLVM-3.9.so.so
|
||||
To:
|
||||
libLLVM-3.9.so
|
||||
|
||||
Fixes #895.
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
cmake/find_llvm.cmake | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/cmake/find_llvm.cmake b/cmake/find_llvm.cmake
|
||||
index adf68c4fc82a..8ceed19f7b9e 100644
|
||||
--- a/cmake/find_llvm.cmake
|
||||
+++ b/cmake/find_llvm.cmake
|
||||
@@ -172,7 +172,11 @@ else()
|
||||
set(targets_to_return "")
|
||||
set(created_targets "")
|
||||
foreach (llvm_lib ${_llvm_libs_list})
|
||||
+ # a bug in llvm-config from LLVM 3.9
|
||||
+ string(REGEX REPLACE "lib(libLLVM[-.a-zA-Z0-9]+\\.so)\\.so$" "\\1" llvm_lib "${llvm_lib}")
|
||||
+
|
||||
get_filename_component(llvm_lib_file_name "${llvm_lib}" NAME)
|
||||
+
|
||||
string(REGEX REPLACE "^(lib)?(LLVM[-.a-zA-Z0-9]+)\\..+$" "\\2" target_name "${llvm_lib_file_name}")
|
||||
list(APPEND targets_to_return "${target_name}")
|
||||
if (NOT TARGET "${target_name}")
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 10:09:20 +0100
|
||||
Subject: llvm50: integerPartWidth is from llvm::APFloatBase
|
||||
Subject: llvm5: integerPartWidth is from llvm::APFloatBase
|
||||
Patch-mainline: no
|
||||
|
||||
Otherwise we see:
|
||||
@ -28,5 +28,5 @@ index a5c7f652e976..65e858c3336d 100644
|
||||
}
|
||||
}
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,33 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Fri, 20 Jul 2018 09:34:51 +0200
|
||||
Subject: llvm39: switch KLEE_RUNTIME_BUILD_TYPE to Debug+Asserts
|
||||
Patch-mainline: no
|
||||
|
||||
So that we do not optimize the library during build. It should be
|
||||
optimized only on runtime, depending on the -optimize parameter.
|
||||
|
||||
It could cause various failures like:
|
||||
inlinable function call in a function with debug info must have a !dbg location
|
||||
call void @klee_overshift_check(i64 64, i64 %int_cast_to_i64)
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index c34b8786f313..961ab19d75df 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -520,7 +520,7 @@ set(available_klee_runtime_build_types
|
||||
if (NOT KLEE_RUNTIME_BUILD_TYPE)
|
||||
message(STATUS "KLEE_RUNTIME_BUILD_TYPE is not set. Setting default")
|
||||
message(STATUS "The available runtime build types are: ${available_klee_runtime_build_types}")
|
||||
- set(KLEE_RUNTIME_BUILD_TYPE "Release+Debug+Asserts" CACHE String
|
||||
+ set(KLEE_RUNTIME_BUILD_TYPE "Debug+Asserts" CACHE String
|
||||
"Options are ${available_klee_runtime_build_types}"
|
||||
FORCE)
|
||||
endif()
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 10:27:54 +0100
|
||||
Subject: llvm50: handle getOrInsertFunction terminator
|
||||
Subject: llvm5: handle getOrInsertFunction terminator
|
||||
Patch-mainline: no
|
||||
|
||||
llvm 5 does not terminate getOrInsertFunction parameters with NULL, take
|
||||
@ -13,8 +13,7 @@ Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
include/klee/Config/Version.h | 6 ++++++
|
||||
lib/Module/Checks.cpp | 8 ++++----
|
||||
lib/Module/IntrinsicCleaner.cpp | 3 ++-
|
||||
tools/klee/main.cpp | 4 ++--
|
||||
4 files changed, 14 insertions(+), 7 deletions(-)
|
||||
3 files changed, 12 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/include/klee/Config/Version.h b/include/klee/Config/Version.h
|
||||
index 532051602fe3..a02ce28baaae 100644
|
||||
@ -71,21 +70,6 @@ index c48952c28004..ab16a2654492 100644
|
||||
F->setDoesNotReturn();
|
||||
F->setDoesNotThrow();
|
||||
|
||||
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
|
||||
index 883be83a4130..c0805f457717 100644
|
||||
--- a/tools/klee/main.cpp
|
||||
+++ b/tools/klee/main.cpp
|
||||
@@ -675,8 +675,8 @@ static void initEnv(Module *mainModule) {
|
||||
cast<Function>(mainModule->getOrInsertFunction("klee_init_env",
|
||||
Type::getVoidTy(ctx),
|
||||
argcPtr->getType(),
|
||||
- argvPtr->getType(),
|
||||
- NULL));
|
||||
+ argvPtr->getType()
|
||||
+ KLEE_LLVM_GOIF_TERMINATOR));
|
||||
assert(initEnvFn);
|
||||
std::vector<Value*> args;
|
||||
args.push_back(argcPtr);
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,88 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Wed, 7 Jun 2017 14:57:45 +0200
|
||||
Subject: llvm40: handle different header names
|
||||
Patch-mainline: no
|
||||
|
||||
LLVM 4.0 renamed and split some headers. Take this into account in
|
||||
includes.
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
lib/Module/KModule.cpp | 4 ++++
|
||||
lib/Module/ModuleUtil.cpp | 9 ++++++++-
|
||||
tools/klee/main.cpp | 7 ++++++-
|
||||
3 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/Module/KModule.cpp b/lib/Module/KModule.cpp
|
||||
index 74d91a8f0122..c041be10313c 100644
|
||||
--- a/lib/Module/KModule.cpp
|
||||
+++ b/lib/Module/KModule.cpp
|
||||
@@ -21,7 +21,11 @@
|
||||
#include "klee/Internal/Support/Debug.h"
|
||||
#include "klee/Internal/Support/ModuleUtil.h"
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+#include "llvm/Bitcode/BitcodeWriter.h"
|
||||
+#else
|
||||
#include "llvm/Bitcode/ReaderWriter.h"
|
||||
+#endif
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
|
||||
index 0e87b5a6deca..c2792454d904 100644
|
||||
--- a/lib/Module/ModuleUtil.cpp
|
||||
+++ b/lib/Module/ModuleUtil.cpp
|
||||
@@ -24,7 +24,9 @@
|
||||
#include "llvm/Object/Archive.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
+#if LLVM_VERSION_CODE < LLVM_VERSION(4, 0)
|
||||
#include "llvm/Support/DataStream.h"
|
||||
+#endif
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/SourceMgr.h"
|
||||
|
||||
@@ -43,8 +45,13 @@
|
||||
#include "llvm/IR/DiagnosticPrinter.h"
|
||||
#endif
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+#include <llvm/Bitcode/BitcodeReader.h>
|
||||
+#else
|
||||
+#include <llvm/Bitcode/ReaderWriter.h>
|
||||
+#endif
|
||||
+
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
-#include "llvm/Bitcode/ReaderWriter.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
|
||||
index 7be5f07cdc0e..c7dc517a8eee 100644
|
||||
--- a/tools/klee/main.cpp
|
||||
+++ b/tools/klee/main.cpp
|
||||
@@ -23,7 +23,6 @@
|
||||
#include "klee/Interpreter.h"
|
||||
#include "klee/Statistics.h"
|
||||
|
||||
-#include "llvm/Bitcode/ReaderWriter.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/InstrTypes.h"
|
||||
@@ -46,6 +45,12 @@
|
||||
#include "llvm/Support/system_error.h"
|
||||
#endif
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+#include <llvm/Bitcode/BitcodeReader.h>
|
||||
+#else
|
||||
+#include <llvm/Bitcode/ReaderWriter.h>
|
||||
+#endif
|
||||
+
|
||||
#include <dirent.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 10:38:35 +0100
|
||||
Subject: llvm50: SwitchInst case functions now return pointers
|
||||
Subject: llvm5: SwitchInst case functions now return pointers
|
||||
Patch-mainline: no
|
||||
|
||||
Starting llvm 5, SwitchInst->findCaseValue() now has to be dereferenced
|
||||
@ -15,7 +15,7 @@ Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
|
||||
index 51d36b352e5c..75af0fd09bd8 100644
|
||||
index 04fd6941d34a..64d0f66e4073 100644
|
||||
--- a/lib/Core/Executor.cpp
|
||||
+++ b/lib/Core/Executor.cpp
|
||||
@@ -1673,7 +1673,11 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
|
||||
@ -31,5 +31,5 @@ index 51d36b352e5c..75af0fd09bd8 100644
|
||||
} else {
|
||||
// Handle possible different branch targets
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,39 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Wed, 7 Jun 2017 14:54:32 +0200
|
||||
Subject: llvm: APFloat members are functions in LLVM 4.0
|
||||
Patch-mainline: no
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
lib/Core/Executor.cpp | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
|
||||
index 7f69a618b8ec..1a5b7b9df527 100644
|
||||
--- a/lib/Core/Executor.cpp
|
||||
+++ b/lib/Core/Executor.cpp
|
||||
@@ -1480,12 +1480,21 @@ static bool isDebugIntrinsic(const Function *f, KModule *KM) {
|
||||
|
||||
static inline const llvm::fltSemantics * fpWidthToSemantics(unsigned width) {
|
||||
switch(width) {
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ case Expr::Int32:
|
||||
+ return &llvm::APFloat::IEEEsingle();
|
||||
+ case Expr::Int64:
|
||||
+ return &llvm::APFloat::IEEEdouble();
|
||||
+ case Expr::Fl80:
|
||||
+ return &llvm::APFloat::x87DoubleExtended();
|
||||
+#else
|
||||
case Expr::Int32:
|
||||
return &llvm::APFloat::IEEEsingle;
|
||||
case Expr::Int64:
|
||||
return &llvm::APFloat::IEEEdouble;
|
||||
case Expr::Fl80:
|
||||
return &llvm::APFloat::x87DoubleExtended;
|
||||
+#endif
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 10:42:53 +0100
|
||||
Subject: llvm50: handle new file_magic's location
|
||||
Subject: llvm5: handle new file_magic's location
|
||||
Patch-mainline: no
|
||||
|
||||
llvm 5, moved file_magic to BinaryFormat in commit
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
|
||||
index 7f4bdb49380a..f1dbdb13bcff 100644
|
||||
index bfec9e7dc7ff..ecc114460a3f 100644
|
||||
--- a/lib/Module/ModuleUtil.cpp
|
||||
+++ b/lib/Module/ModuleUtil.cpp
|
||||
@@ -14,6 +14,9 @@
|
||||
@ -25,7 +25,7 @@ index 7f4bdb49380a..f1dbdb13bcff 100644
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/IntrinsicInst.h"
|
||||
@@ -380,13 +383,19 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
@@ -381,13 +384,19 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
MemoryBuffer *Buffer = bufferErr->get();
|
||||
#endif
|
||||
|
||||
@ -46,7 +46,7 @@ index 7f4bdb49380a..f1dbdb13bcff 100644
|
||||
SMDiagnostic Err;
|
||||
#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
|
||||
std::unique_ptr<llvm::Module> module(parseIR(Buffer, Err, context));
|
||||
@@ -403,7 +412,11 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
@@ -404,7 +413,11 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -59,5 +59,5 @@ index 7f4bdb49380a..f1dbdb13bcff 100644
|
||||
Expected<std::unique_ptr<object::Binary> > archOwner =
|
||||
object::createBinary(Buffer, &context);
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,53 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Wed, 7 Jun 2017 14:58:29 +0200
|
||||
Subject: llvm40: errorOr and similar
|
||||
Patch-mainline: no
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
lib/Module/ModuleUtil.cpp | 13 +++++++++++--
|
||||
1 file changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
|
||||
index c2792454d904..7f4bdb49380a 100644
|
||||
--- a/lib/Module/ModuleUtil.cpp
|
||||
+++ b/lib/Module/ModuleUtil.cpp
|
||||
@@ -432,7 +432,7 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
if (auto archive = dyn_cast<object::Archive>(arch)) {
|
||||
// Load all bitcode files into memory
|
||||
#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
|
||||
- Error Err;
|
||||
+ Error Err = Error::success();
|
||||
for (object::Archive::child_iterator AI = archive->child_begin(Err),
|
||||
AE = archive->child_end();
|
||||
AI != AE; ++AI)
|
||||
@@ -460,8 +460,14 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
#else
|
||||
object::Archive::child_iterator childOrErr = AI;
|
||||
#endif
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ Expected<StringRef> memberNameErr = childOrErr->getName();
|
||||
+ ec = memberNameErr ? std::error_code() :
|
||||
+ errorToErrorCode(memberNameErr.takeError());
|
||||
+#else
|
||||
ErrorOr<StringRef> memberNameErr = childOrErr->getName();
|
||||
ec = memberNameErr.getError();
|
||||
+#endif
|
||||
if (!ec) {
|
||||
memberName = memberNameErr.get();
|
||||
#else
|
||||
@@ -492,7 +498,10 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
|
||||
#endif
|
||||
if (ec) {
|
||||
// If we can't open as a binary object file its hopefully a bitcode file
|
||||
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ Expected<MemoryBufferRef> buff = childOrErr->getMemoryBufferRef();
|
||||
+ ec = buff ? std::error_code() : errorToErrorCode(buff.takeError());
|
||||
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
|
||||
ErrorOr<MemoryBufferRef> buff = childOrErr->getMemoryBufferRef();
|
||||
ec = buff.getError();
|
||||
#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,9 +1,9 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 11:07:47 +0100
|
||||
Subject: llvm50: use MutableArrayRef for APFloat::convertToInteger
|
||||
Subject: llvm5: use MutableArrayRef for APFloat::convertToInteger
|
||||
Patch-mainline: no
|
||||
|
||||
in llvm 5, since commit 957caa243d9270df37a566aedae3f1244e7b62ef, the
|
||||
In llvm 5, since commit 957caa243d9270df37a566aedae3f1244e7b62ef, the
|
||||
first parameter to APFloat::convertToInteger is MutableArrayRef. So
|
||||
handle that.
|
||||
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
|
||||
index 75af0fd09bd8..46fd2be42351 100644
|
||||
index 64d0f66e4073..b5d7e6ce8f6c 100644
|
||||
--- a/lib/Core/Executor.cpp
|
||||
+++ b/lib/Core/Executor.cpp
|
||||
@@ -2326,7 +2326,12 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
|
||||
@ -22,7 +22,7 @@ index 75af0fd09bd8..46fd2be42351 100644
|
||||
bool isExact = true;
|
||||
- Arg.convertToInteger(&value, resultType, false,
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
|
||||
+ MutableArrayRef<uint64_t> valueRef = makeMutableArrayRef(value);
|
||||
+ auto valueRef = makeMutableArrayRef(value);
|
||||
+#else
|
||||
+ uint64_t *valueRef = &value;
|
||||
+#endif
|
||||
@ -36,7 +36,7 @@ index 75af0fd09bd8..46fd2be42351 100644
|
||||
bool isExact = true;
|
||||
- Arg.convertToInteger(&value, resultType, true,
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
|
||||
+ MutableArrayRef<uint64_t> valueRef = makeMutableArrayRef(value);
|
||||
+ auto valueRef = makeMutableArrayRef(value);
|
||||
+#else
|
||||
+ uint64_t *valueRef = &value;
|
||||
+#endif
|
||||
@ -45,5 +45,5 @@ index 75af0fd09bd8..46fd2be42351 100644
|
||||
bindLocal(ki, state, ConstantExpr::alloc(value, resultType));
|
||||
break;
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,199 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Wed, 7 Jun 2017 13:36:28 +0200
|
||||
Subject: llvm: use chrono helpers from LLVM 4.0
|
||||
Patch-mainline: no
|
||||
|
||||
LLVM 4.0 removes the old time interface and starts using the C++11's
|
||||
chrono. So switch to that in klee for LLVM 4.0 too.
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
include/klee/Internal/Support/Timer.h | 8 +++++++
|
||||
include/klee/Internal/System/Time.h | 11 +++++++++
|
||||
lib/Core/StatsTracker.cpp | 24 ++++++++++++++++++++
|
||||
lib/Support/Time.cpp | 32 +++++++++++++++++++++++++++
|
||||
lib/Support/Timer.cpp | 16 ++++++++++++++
|
||||
5 files changed, 91 insertions(+)
|
||||
|
||||
diff --git a/include/klee/Internal/Support/Timer.h b/include/klee/Internal/Support/Timer.h
|
||||
index a422abd027f3..d80ccb31f647 100644
|
||||
--- a/include/klee/Internal/Support/Timer.h
|
||||
+++ b/include/klee/Internal/Support/Timer.h
|
||||
@@ -12,9 +12,17 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+#include <llvm/Support/Chrono.h>
|
||||
+#endif
|
||||
+
|
||||
namespace klee {
|
||||
class WallTimer {
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ llvm::sys::TimePoint<> start;
|
||||
+#else
|
||||
uint64_t startMicroseconds;
|
||||
+#endif
|
||||
|
||||
public:
|
||||
WallTimer();
|
||||
diff --git a/include/klee/Internal/System/Time.h b/include/klee/Internal/System/Time.h
|
||||
index 220e260c975e..12522c866439 100644
|
||||
--- a/include/klee/Internal/System/Time.h
|
||||
+++ b/include/klee/Internal/System/Time.h
|
||||
@@ -10,7 +10,13 @@
|
||||
#ifndef KLEE_UTIL_TIME_H
|
||||
#define KLEE_UTIL_TIME_H
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+#include <chrono>
|
||||
+
|
||||
+#include "llvm/Support/Chrono.h"
|
||||
+#else
|
||||
#include "llvm/Support/TimeValue.h"
|
||||
+#endif
|
||||
|
||||
namespace klee {
|
||||
namespace util {
|
||||
@@ -22,7 +28,12 @@ namespace klee {
|
||||
double getWallTime();
|
||||
|
||||
/// Wall time as TimeValue object.
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ double durationToDouble(std::chrono::nanoseconds dur);
|
||||
+ llvm::sys::TimePoint<> getWallTimeVal();
|
||||
+#else
|
||||
llvm::sys::TimeValue getWallTimeVal();
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/lib/Core/StatsTracker.cpp b/lib/Core/StatsTracker.cpp
|
||||
index 97e7fccb5e3c..ecf90bd0126a 100644
|
||||
--- a/lib/Core/StatsTracker.cpp
|
||||
+++ b/lib/Core/StatsTracker.cpp
|
||||
@@ -285,6 +285,29 @@ void StatsTracker::done() {
|
||||
void StatsTracker::stepInstruction(ExecutionState &es) {
|
||||
if (OutputIStats) {
|
||||
if (TrackInstructionTime) {
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ static sys::TimePoint<> lastNowTime;
|
||||
+ static std::chrono::nanoseconds lastUserTime(0);
|
||||
+
|
||||
+ if (lastUserTime.count() == 0) {
|
||||
+ std::chrono::nanoseconds sys;
|
||||
+ sys::Process::GetTimeUsage(lastNowTime, lastUserTime, sys);
|
||||
+ } else {
|
||||
+ sys::TimePoint<> now;
|
||||
+ std::chrono::nanoseconds user, sys;
|
||||
+
|
||||
+ sys::Process::GetTimeUsage(now, user, sys);
|
||||
+
|
||||
+ std::chrono::microseconds delta =
|
||||
+ std::chrono::duration_cast<std::chrono::microseconds>(user - lastUserTime);
|
||||
+ std::chrono::microseconds deltaNow =
|
||||
+ std::chrono::duration_cast<std::chrono::microseconds>(now - lastNowTime);
|
||||
+ stats::instructionTime += delta.count();
|
||||
+ stats::instructionRealTime += deltaNow.count();
|
||||
+ lastUserTime = user;
|
||||
+ lastNowTime = now;
|
||||
+ }
|
||||
+#else
|
||||
static sys::TimeValue lastNowTime(0,0),lastUserTime(0,0);
|
||||
|
||||
if (lastUserTime.seconds()==0 && lastUserTime.nanoseconds()==0) {
|
||||
@@ -300,6 +323,7 @@ void StatsTracker::stepInstruction(ExecutionState &es) {
|
||||
lastUserTime = user;
|
||||
lastNowTime = now;
|
||||
}
|
||||
+#endif
|
||||
}
|
||||
|
||||
Instruction *inst = es.pc->inst;
|
||||
diff --git a/lib/Support/Time.cpp b/lib/Support/Time.cpp
|
||||
index be5eaf186958..f508e6fa1bcb 100644
|
||||
--- a/lib/Support/Time.cpp
|
||||
+++ b/lib/Support/Time.cpp
|
||||
@@ -10,12 +10,43 @@
|
||||
#include "klee/Config/Version.h"
|
||||
#include "klee/Internal/System/Time.h"
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+#include <chrono>
|
||||
+
|
||||
+#include <llvm/Support/Chrono.h>
|
||||
+#else
|
||||
#include "llvm/Support/TimeValue.h"
|
||||
+#endif
|
||||
+
|
||||
#include "llvm/Support/Process.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace klee;
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+double util::durationToDouble(std::chrono::nanoseconds dur)
|
||||
+{
|
||||
+ return dur.count() / 1e9;
|
||||
+}
|
||||
+
|
||||
+double util::getUserTime() {
|
||||
+ sys::TimePoint<> now;
|
||||
+ std::chrono::nanoseconds user, sys;
|
||||
+
|
||||
+ sys::Process::GetTimeUsage(now, user, sys);
|
||||
+
|
||||
+ return durationToDouble(user);
|
||||
+}
|
||||
+
|
||||
+double util::getWallTime() {
|
||||
+ return durationToDouble(getWallTimeVal().time_since_epoch());
|
||||
+}
|
||||
+
|
||||
+sys::TimePoint<> util::getWallTimeVal() {
|
||||
+ return std::chrono::system_clock::now();
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
double util::getUserTime() {
|
||||
sys::TimeValue now(0,0),user(0,0),sys(0,0);
|
||||
sys::Process::GetTimeUsage(now,user,sys);
|
||||
@@ -30,3 +61,4 @@ double util::getWallTime() {
|
||||
sys::TimeValue util::getWallTimeVal() {
|
||||
return sys::TimeValue::now();
|
||||
}
|
||||
+#endif
|
||||
diff --git a/lib/Support/Timer.cpp b/lib/Support/Timer.cpp
|
||||
index da96981079ae..a223b39ada57 100644
|
||||
--- a/lib/Support/Timer.cpp
|
||||
+++ b/lib/Support/Timer.cpp
|
||||
@@ -15,6 +15,20 @@
|
||||
using namespace klee;
|
||||
using namespace llvm;
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+
|
||||
+WallTimer::WallTimer() {
|
||||
+ start = util::getWallTimeVal();
|
||||
+}
|
||||
+
|
||||
+uint64_t WallTimer::check() {
|
||||
+ sys::TimePoint<> now = util::getWallTimeVal();
|
||||
+ return std::chrono::duration_cast<std::chrono::microseconds>(now -
|
||||
+ start).count();
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+
|
||||
WallTimer::WallTimer() {
|
||||
startMicroseconds = util::getWallTimeVal().usec();
|
||||
}
|
||||
@@ -22,3 +36,5 @@ WallTimer::WallTimer() {
|
||||
uint64_t WallTimer::check() {
|
||||
return util::getWallTimeVal().usec() - startMicroseconds;
|
||||
}
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Wed, 23 May 2018 15:01:34 +0200
|
||||
Subject: llvm50: Intrinsic::objectsize has three arguments
|
||||
Subject: llvm5: Intrinsic::objectsize has three arguments
|
||||
Patch-mainline: no
|
||||
|
||||
Modify the IntrinsicCleaner accordingly.
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
1 file changed, 16 insertions(+)
|
||||
|
||||
diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
|
||||
index ab16a2654492..19807ce08583 100644
|
||||
index ab16a2654492..ee65be69e543 100644
|
||||
--- a/lib/Module/IntrinsicCleaner.cpp
|
||||
+++ b/lib/Module/IntrinsicCleaner.cpp
|
||||
@@ -227,13 +227,29 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) {
|
||||
@ -35,9 +35,9 @@ index ab16a2654492..19807ce08583 100644
|
||||
"Second argument is not an i1");
|
||||
+
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
|
||||
+ Value *nullArg = ii->getArgOperand(2);
|
||||
+ auto nullArg = ii->getArgOperand(2);
|
||||
+ assert(nullArg && "Failed to get second argument");
|
||||
+ ConstantInt *nullArgAsInt = dyn_cast<ConstantInt>(nullArg);
|
||||
+ auto nullArgAsInt = dyn_cast<ConstantInt>(nullArg);
|
||||
+ assert(nullArgAsInt && "Third arg is not a ConstantInt");
|
||||
+ assert(nullArgAsInt->getBitWidth() == 1 &&
|
||||
+ "Third argument is not an i1");
|
||||
@ -48,5 +48,5 @@ index ab16a2654492..19807ce08583 100644
|
||||
IntegerType *intType = dyn_cast<IntegerType>(ii->getType());
|
||||
assert(intType && "intrinsic does not have integer return type");
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,71 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Thu, 8 Jun 2017 13:25:56 +0200
|
||||
Subject: llvm: PointerType is not SequentialType in LLVM 4
|
||||
Patch-mainline: no
|
||||
|
||||
So handle the type specially whenever needed.
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
include/klee/util/GetElementPtrTypeIterator.h | 4 ++++
|
||||
lib/Core/Executor.cpp | 22 ++++++++++++++++---
|
||||
2 files changed, 23 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/include/klee/util/GetElementPtrTypeIterator.h b/include/klee/util/GetElementPtrTypeIterator.h
|
||||
index 5fb9f4ec5c2f..bf7cb6ff0bea 100644
|
||||
--- a/include/klee/util/GetElementPtrTypeIterator.h
|
||||
+++ b/include/klee/util/GetElementPtrTypeIterator.h
|
||||
@@ -78,6 +78,10 @@ class generic_gep_type_iterator
|
||||
generic_gep_type_iterator& operator++() { // Preincrement
|
||||
if (llvm::CompositeType *CT = dyn_cast<llvm::CompositeType>(CurTy)) {
|
||||
CurTy = CT->getTypeAtIndex(getOperand());
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ } else if (llvm::PointerType *ptr = dyn_cast<llvm::PointerType>(CurTy)) {
|
||||
+ CurTy = ptr->getElementType();
|
||||
+#endif
|
||||
} else {
|
||||
CurTy = 0;
|
||||
}
|
||||
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
|
||||
index 1a5b7b9df527..51d36b352e5c 100644
|
||||
--- a/lib/Core/Executor.cpp
|
||||
+++ b/lib/Core/Executor.cpp
|
||||
@@ -2621,8 +2621,7 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, TypeIt ib, TypeIt ie) {
|
||||
uint64_t addend = sl->getElementOffset((unsigned) ci->getZExtValue());
|
||||
constantOffset = constantOffset->Add(ConstantExpr::alloc(addend,
|
||||
Context::get().getPointerWidth()));
|
||||
- } else {
|
||||
- const SequentialType *set = cast<SequentialType>(*ii);
|
||||
+ } else if (const SequentialType *set = dyn_cast<SequentialType>(*ii)) {
|
||||
uint64_t elementSize =
|
||||
kmodule->targetData->getTypeStoreSize(set->getElementType());
|
||||
Value *operand = ii.getOperand();
|
||||
@@ -2636,7 +2635,24 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, TypeIt ib, TypeIt ie) {
|
||||
} else {
|
||||
kgepi->indices.push_back(std::make_pair(index, elementSize));
|
||||
}
|
||||
- }
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ } else if (const PointerType *ptr = dyn_cast<PointerType>(*ii)) {
|
||||
+ uint64_t elementSize =
|
||||
+ kmodule->targetData->getTypeStoreSize(ptr->getElementType());
|
||||
+ Value *operand = ii.getOperand();
|
||||
+ if (Constant *c = dyn_cast<Constant>(operand)) {
|
||||
+ ref<ConstantExpr> index =
|
||||
+ evalConstant(c)->SExt(Context::get().getPointerWidth());
|
||||
+ ref<ConstantExpr> addend =
|
||||
+ index->Mul(ConstantExpr::alloc(elementSize,
|
||||
+ Context::get().getPointerWidth()));
|
||||
+ constantOffset = constantOffset->Add(addend);
|
||||
+ } else {
|
||||
+ kgepi->indices.push_back(std::make_pair(index, elementSize));
|
||||
+ }
|
||||
+#endif
|
||||
+ } else
|
||||
+ assert("invalid type" && 0);
|
||||
index++;
|
||||
}
|
||||
kgepi->offset = constantOffset->getZExtValue();
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Wed, 23 May 2018 14:54:48 +0200
|
||||
Subject: llvm50: test, change objectsize
|
||||
Subject: llvm5: test, change objectsize
|
||||
Patch-mainline: no
|
||||
|
||||
@llvm.objectsize has now three aguments, so fix the tests accordingly.
|
||||
@ -95,5 +95,5 @@ index 3a111f99c619..95070e66e45c 100644
|
||||
|
||||
declare void @abort() noreturn nounwind
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,32 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Fri, 17 Nov 2017 17:56:18 +0100
|
||||
Subject: llvm40: gep_type_iterator has no operator*
|
||||
Patch-mainline: no
|
||||
|
||||
Starting with LLVM 4.0, we have getStructTypeOrNull(), so use it.
|
||||
operator* in post-4 will have a different semantics.
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
lib/Core/ExecutorUtil.cpp | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/lib/Core/ExecutorUtil.cpp b/lib/Core/ExecutorUtil.cpp
|
||||
index a352db3339c4..7718ae9d0ccb 100644
|
||||
--- a/lib/Core/ExecutorUtil.cpp
|
||||
+++ b/lib/Core/ExecutorUtil.cpp
|
||||
@@ -213,7 +213,11 @@ namespace klee {
|
||||
continue;
|
||||
|
||||
// Handle a struct index, which adds its field offset to the pointer.
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
|
||||
+ if (StructType *STy = ii.getStructTypeOrNull()) {
|
||||
+#else
|
||||
if (StructType *STy = dyn_cast<StructType>(*ii)) {
|
||||
+#endif
|
||||
unsigned ElementIdx = indexOp->getZExtValue();
|
||||
const StructLayout *SL = kmodule->targetData->getStructLayout(STy);
|
||||
base = base->Add(
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Sun, 27 May 2018 10:26:43 +0200
|
||||
Subject: llvm50: test, add -disable-O0-optnone to -O0
|
||||
Subject: llvm5: test, add -disable-O0-optnone to -O0
|
||||
Patch-mainline: no
|
||||
|
||||
Otherwise optimizations done in klee won't have any effect.
|
||||
@ -213,7 +213,7 @@ index b2db980dc7b7..7d0faa0842fc 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --no-output --exit-on-error --no-externals %t1.bc
|
||||
|
||||
diff --git a/test/CXX/StaticConstructor.cpp b/test/CXX/StaticConstructor.cpp
|
||||
index 56fcb97be385..5332dc0b7846 100644
|
||||
index c184526e3601..3c61aec45acb 100644
|
||||
--- a/test/CXX/StaticConstructor.cpp
|
||||
+++ b/test/CXX/StaticConstructor.cpp
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -223,7 +223,7 @@ index 56fcb97be385..5332dc0b7846 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --libc=klee --no-output --exit-on-error %t1.bc
|
||||
|
||||
diff --git a/test/CXX/StaticDestructor.cpp b/test/CXX/StaticDestructor.cpp
|
||||
index adc449a5c1f7..608525083bbb 100644
|
||||
index 2cf01e3b6d33..15520fc48504 100644
|
||||
--- a/test/CXX/StaticDestructor.cpp
|
||||
+++ b/test/CXX/StaticDestructor.cpp
|
||||
@@ -1,6 +1,6 @@
|
||||
@ -233,7 +233,7 @@ index adc449a5c1f7..608525083bbb 100644
|
||||
+// RUN: %llvmgxx %s -emit-llvm -g %O0opt -c -o %t1.bc
|
||||
// RUN: rm -rf %t.klee-out
|
||||
// RUN: %klee --output-dir=%t.klee-out --optimize=false --libc=klee --no-output %t1.bc 2> %t1.log
|
||||
// RUN: grep ":17: memory error" %t1.log
|
||||
// RUN: FileCheck --input-file %t1.log %s
|
||||
diff --git a/test/CXX/Trivial.cpp b/test/CXX/Trivial.cpp
|
||||
index 2b8ceed36cb9..18845820c067 100644
|
||||
--- a/test/CXX/Trivial.cpp
|
||||
@ -375,7 +375,7 @@ index be0879358028..e6e695ca2cb7 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --exit-on-error %t1.bc
|
||||
|
||||
diff --git a/test/Feature/InAndOutOfBounds.c b/test/Feature/InAndOutOfBounds.c
|
||||
index 6eb8784a7353..5f10835f4a6d 100644
|
||||
index 9b913609c046..3c6fe37ec8aa 100644
|
||||
--- a/test/Feature/InAndOutOfBounds.c
|
||||
+++ b/test/Feature/InAndOutOfBounds.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -395,7 +395,7 @@ index 02aa23320075..8e39b99ff894 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out %t1.bc
|
||||
|
||||
diff --git a/test/Feature/KleeReportError.c b/test/Feature/KleeReportError.c
|
||||
index 4e21df1870f7..665d194607bd 100644
|
||||
index 96879a5571f9..b83472549a7b 100644
|
||||
--- a/test/Feature/KleeReportError.c
|
||||
+++ b/test/Feature/KleeReportError.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -450,7 +450,7 @@ index 4ea9daee629f..acde2d8ee5bf 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --optimize=0 --exit-on-error %t1.bc > %t2.out
|
||||
|
||||
diff --git a/test/Feature/MultipleFreeResolution.c b/test/Feature/MultipleFreeResolution.c
|
||||
index 704057f93891..63b7c1ab3645 100644
|
||||
index 5c7dfdd8c941..540324a596a8 100644
|
||||
--- a/test/Feature/MultipleFreeResolution.c
|
||||
+++ b/test/Feature/MultipleFreeResolution.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -496,7 +496,7 @@ index 5f9068360df5..22dd973047cc 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out %t1.bc > %t1.log
|
||||
// RUN: diff %t1.res %t1.log
|
||||
diff --git a/test/Feature/OneFreeError.c b/test/Feature/OneFreeError.c
|
||||
index 4f5a8c8c0153..76e85d6b3516 100644
|
||||
index 64a0425dc11d..e68f333f7232 100644
|
||||
--- a/test/Feature/OneFreeError.c
|
||||
+++ b/test/Feature/OneFreeError.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -506,7 +506,7 @@ index 4f5a8c8c0153..76e85d6b3516 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out %t1.bc 2>&1 | FileCheck %s
|
||||
// RUN: test -f %t.klee-out/test000001.ptr.err
|
||||
diff --git a/test/Feature/OneOutOfBounds.c b/test/Feature/OneOutOfBounds.c
|
||||
index 85fb2a79599e..444820c9b878 100644
|
||||
index 88a2ae435418..01fa0f922f68 100644
|
||||
--- a/test/Feature/OneOutOfBounds.c
|
||||
+++ b/test/Feature/OneOutOfBounds.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -536,7 +536,7 @@ index a1b31f57cbc1..d02d2229dc3a 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out %t1.bc
|
||||
// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 4
|
||||
diff --git a/test/Feature/OvershiftCheck.c b/test/Feature/OvershiftCheck.c
|
||||
index 09cbf8ba0f6b..00e5530ad8d5 100644
|
||||
index ace54cee98f4..0a5cfc3b9704 100644
|
||||
--- a/test/Feature/OvershiftCheck.c
|
||||
+++ b/test/Feature/OvershiftCheck.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -544,7 +544,7 @@ index 09cbf8ba0f6b..00e5530ad8d5 100644
|
||||
+// RUN: %llvmgcc %s -emit-llvm -g %O0opt -c -o %t.bc
|
||||
// RUN: rm -rf %t.klee-out
|
||||
// RUN: %klee --output-dir=%t.klee-out -check-overshift %t.bc 2> %t.log
|
||||
// RUN: grep -c "overshift error" %t.log
|
||||
// RUN: FileCheck --input-file %t.log %s
|
||||
diff --git a/test/Feature/PreferCex.c b/test/Feature/PreferCex.c
|
||||
index a765eea8b4af..8d88a3ce79bc 100644
|
||||
--- a/test/Feature/PreferCex.c
|
||||
@ -621,7 +621,7 @@ index aa86a856d299..a2faf08a81ee 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --max-solver-time=1 %t1.bc
|
||||
// FIXME: This test occasionally fails when using Z3 4.4.1 but
|
||||
diff --git a/test/Feature/SourceMapping.c b/test/Feature/SourceMapping.c
|
||||
index 9835d7018b97..1927d2d6b8da 100644
|
||||
index bc13652d91e4..aa849c5f88c4 100644
|
||||
--- a/test/Feature/SourceMapping.c
|
||||
+++ b/test/Feature/SourceMapping.c
|
||||
@@ -1,7 +1,7 @@
|
||||
@ -644,16 +644,15 @@ index ae5531319d45..63ba85c8a337 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out %t.bc | FileCheck %s
|
||||
|
||||
diff --git a/test/Feature/Vararg.c b/test/Feature/Vararg.c
|
||||
index a78b784e3f62..11416c3730aa 100644
|
||||
index 9f4e9dabb00e..239ec9a35bde 100644
|
||||
--- a/test/Feature/Vararg.c
|
||||
+++ b/test/Feature/Vararg.c
|
||||
@@ -1,5 +1,5 @@
|
||||
// REQUIRES: not-darwin
|
||||
-// RUN: %llvmgcc %s -emit-llvm -O0 -c -o %t1.bc
|
||||
+// RUN: %llvmgcc %s -emit-llvm %O0opt -c -o %t1.bc
|
||||
@@ -1,4 +1,4 @@
|
||||
-// RUN: %llvmgcc %s -emit-llvm -O0 -c -g -o %t1.bc
|
||||
+// RUN: %llvmgcc %s -emit-llvm %O0opt -c -g -o %t1.bc
|
||||
// RUN: rm -rf %t.klee-out
|
||||
// RUN: %klee --output-dir=%t.klee-out %t1.bc > %t2.out
|
||||
// RUN: grep "types: (52, 37, 2.00, (9,12,15))" %t2.out
|
||||
// This test needs deterministic allocation with enough spacing between the allocations.
|
||||
// Otherwise, if by coincidence the allocated vararg memory object is directly before another valid memory object,
|
||||
diff --git a/test/Feature/WithLibc.c b/test/Feature/WithLibc.c
|
||||
index 0eca8213f384..8c07041d89f6 100644
|
||||
--- a/test/Feature/WithLibc.c
|
||||
@ -675,7 +674,7 @@ index 6a9bbc2113ac..4a0bc36f1989 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out -use-cex-cache=1 -check-overshift=0 %t.bc
|
||||
// RUN: not grep "ASSERTION FAIL" %t.klee-out/messages.txt
|
||||
diff --git a/test/Feature/consecutive_divide_by_zero.c b/test/Feature/consecutive_divide_by_zero.c
|
||||
index 31124ea4611c..157f5e1cf604 100644
|
||||
index ebe0dcb54307..b44572aa7187 100644
|
||||
--- a/test/Feature/consecutive_divide_by_zero.c
|
||||
+++ b/test/Feature/consecutive_divide_by_zero.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -683,7 +682,7 @@ index 31124ea4611c..157f5e1cf604 100644
|
||||
+// RUN: %llvmgcc -emit-llvm -c -g %O0opt %s -o %t.bc
|
||||
// RUN: rm -rf %t.klee-out
|
||||
// RUN: %klee --output-dir=%t.klee-out -check-div-zero -emit-all-errors=0 %t.bc 2> %t.log
|
||||
// RUN: grep "completed paths = 3" %t.log
|
||||
// RUN: FileCheck --input-file=%t.log %s
|
||||
diff --git a/test/Feature/const_array_opt1.c b/test/Feature/const_array_opt1.c
|
||||
index ac43bdf7fd4b..b466e56ce784 100644
|
||||
--- a/test/Feature/const_array_opt1.c
|
||||
@ -725,7 +724,7 @@ index f4fa8aa5c4b7..4c331dd0e76b 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out -use-cex-cache=1 %t.bc
|
||||
// RUN: grep "KLEE: done: explored paths = 5" %t.klee-out/info
|
||||
diff --git a/test/Feature/ubsan_signed_overflow.c b/test/Feature/ubsan_signed_overflow.c
|
||||
index c89065ebf957..03073ae7f39e 100644
|
||||
index 8d01f7d36045..f4636c335f90 100644
|
||||
--- a/test/Feature/ubsan_signed_overflow.c
|
||||
+++ b/test/Feature/ubsan_signed_overflow.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -735,7 +734,7 @@ index c89065ebf957..03073ae7f39e 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out %t.bc 2>&1 | FileCheck %s
|
||||
|
||||
diff --git a/test/Feature/ubsan_unsigned_overflow.c b/test/Feature/ubsan_unsigned_overflow.c
|
||||
index 1300ffcc195c..c96909bb3a66 100644
|
||||
index e2d9592c37f2..4c783b4c32e7 100644
|
||||
--- a/test/Feature/ubsan_unsigned_overflow.c
|
||||
+++ b/test/Feature/ubsan_unsigned_overflow.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -873,7 +872,7 @@ index 8faa9778ca41..43216d5470b5 100644
|
||||
// RUN: %gentmp %t.klee-out-tmp
|
||||
// RUN: %klee --output-dir=%t.klee-out --run-in=%t.klee-out-tmp --search=random-state --libc=uclibc --posix-runtime --exit-on-error %t.bc --sym-files 1 1 > %t2.log
|
||||
diff --git a/test/Runtime/POSIX/DirSeek.c b/test/Runtime/POSIX/DirSeek.c
|
||||
index 4c68a30c546c..4cb91b7016e0 100644
|
||||
index 821ff8f58a89..449714b95b9f 100644
|
||||
--- a/test/Runtime/POSIX/DirSeek.c
|
||||
+++ b/test/Runtime/POSIX/DirSeek.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -893,15 +892,15 @@ index c012174cdc1f..dc5e17344ed4 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --posix-runtime --exit-on-error %t2.bc --sym-files 1 10
|
||||
|
||||
diff --git a/test/Runtime/POSIX/FD_Fail.c b/test/Runtime/POSIX/FD_Fail.c
|
||||
index 2ee1a1a260d6..9a73e60f202e 100644
|
||||
index 018f43f8a552..74f94bf6e754 100644
|
||||
--- a/test/Runtime/POSIX/FD_Fail.c
|
||||
+++ b/test/Runtime/POSIX/FD_Fail.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-// RUN: %llvmgcc %s -emit-llvm -O0 -c -o %t1.bc
|
||||
+// RUN: %llvmgcc %s -emit-llvm %O0opt -c -o %t1.bc
|
||||
// RUN: rm -rf %t.klee-out
|
||||
// RUN: %klee --output-dir=%t.klee-out --libc=uclibc --posix-runtime %t1.bc --sym-files 0 0 --max-fail 1 > %t.log
|
||||
// RUN: grep -q "fread(): ok" %t.log
|
||||
// RUN: %klee --output-dir=%t.klee-out --libc=uclibc --posix-runtime %t1.bc --max-fail 1 | FileCheck %s
|
||||
|
||||
diff --git a/test/Runtime/POSIX/FD_Fail2.c b/test/Runtime/POSIX/FD_Fail2.c
|
||||
index c1c2cc5fd9de..8fef1eda6df1 100644
|
||||
--- a/test/Runtime/POSIX/FD_Fail2.c
|
||||
@ -944,7 +943,7 @@ index 489c09ed9ff2..34fd346865fb 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --libc=uclibc --posix-runtime %t1.bc --sym-files 1 1
|
||||
|
||||
diff --git a/test/Runtime/POSIX/FreeArgv.c b/test/Runtime/POSIX/FreeArgv.c
|
||||
index 8f812b5d946f..ff07024358d5 100644
|
||||
index 7a5445a3a206..fff1b2c46280 100644
|
||||
--- a/test/Runtime/POSIX/FreeArgv.c
|
||||
+++ b/test/Runtime/POSIX/FreeArgv.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -974,17 +973,17 @@ index eb3a611a2be5..7b890b6729b9 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --libc=klee --posix-runtime --exit-on-error %t2.bc --sym-files 1 10
|
||||
|
||||
diff --git a/test/Runtime/POSIX/Ioctl.c b/test/Runtime/POSIX/Ioctl.c
|
||||
index f1caaf77dea2..8ab5d49ac8fc 100644
|
||||
index c8937a371fd0..61af8662132a 100644
|
||||
--- a/test/Runtime/POSIX/Ioctl.c
|
||||
+++ b/test/Runtime/POSIX/Ioctl.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-// RUN: %llvmgcc %s -emit-llvm -O0 -c -o %t.bc
|
||||
+// RUN: %llvmgcc %s -emit-llvm %O0opt -c -o %t.bc
|
||||
// RUN: rm -rf %t.klee-out
|
||||
// RUN: %klee --output-dir=%t.klee-out --posix-runtime --exit-on-error %t.bc --sym-files 0 4
|
||||
// RUN: %klee --output-dir=%t.klee-out --posix-runtime --exit-on-error %t.bc --sym-stdin 4
|
||||
|
||||
diff --git a/test/Runtime/POSIX/Isatty.c b/test/Runtime/POSIX/Isatty.c
|
||||
index fdfc6ceb0301..7fe44dcf031a 100644
|
||||
index b9232e01eb7f..6501a4a39252 100644
|
||||
--- a/test/Runtime/POSIX/Isatty.c
|
||||
+++ b/test/Runtime/POSIX/Isatty.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -1384,7 +1383,7 @@ index 322e5bb8746d..cc73f0b35583 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out %t1.bc
|
||||
|
||||
diff --git a/test/regression/2014-07-04-unflushed-error-report.c b/test/regression/2014-07-04-unflushed-error-report.c
|
||||
index 0518fb4d4566..f9547c176df9 100644
|
||||
index 0b98944ac78f..a0404db68c0a 100644
|
||||
--- a/test/regression/2014-07-04-unflushed-error-report.c
|
||||
+++ b/test/regression/2014-07-04-unflushed-error-report.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@ -1499,10 +1498,11 @@ index 4cd8ff8d2a0d..195806015a59 100644
|
||||
// RUN: %klee --output-dir=%t.klee-out --entry-point=entry %t.bc
|
||||
|
||||
diff --git a/test/regression/2016-08-12-empty-file.c b/test/regression/2016-08-12-empty-file.c
|
||||
index b965027837f8..a4f1b19cb15d 100644
|
||||
index 56695fe1200c..8165f9242223 100644
|
||||
--- a/test/regression/2016-08-12-empty-file.c
|
||||
+++ b/test/regression/2016-08-12-empty-file.c
|
||||
@@ -1,4 +1,4 @@
|
||||
@@ -1,5 +1,5 @@
|
||||
// REQUIRES: posix-runtime
|
||||
-// RUN: %llvmgcc %s -emit-llvm -g -O0 -c -o %t.bc
|
||||
+// RUN: %llvmgcc %s -emit-llvm -g %O0opt -c -o %t.bc
|
||||
// RUN: rm -rf %t.klee-out
|
||||
@ -1560,5 +1560,5 @@ index 5f2af61e0d89..8d183b77a010 100644
|
||||
// RUN: %klee -stop-after-n-instructions=1 --output-dir=%t.klee-out %t1.bc 2>&1 | FileCheck %s
|
||||
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Fri, 20 Jul 2018 10:06:29 +0200
|
||||
Subject: llvm50: CallSite.paramHasAttr is indexed from 0
|
||||
Subject: llvm5: CallSite.paramHasAttr is indexed from 0
|
||||
Patch-mainline: no
|
||||
|
||||
Since LLVM 5 commit 1f8f0490690b, CallSite.paramHasAttr is indexed from
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
|
||||
index 46fd2be42351..f05561e7fe82 100644
|
||||
index b5d7e6ce8f6c..96285f74a462 100644
|
||||
--- a/lib/Core/Executor.cpp
|
||||
+++ b/lib/Core/Executor.cpp
|
||||
@@ -1543,7 +1543,11 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
|
||||
@ -42,5 +42,5 @@ index 46fd2be42351..f05561e7fe82 100644
|
||||
arguments[i] = SExtExpr::create(arguments[i], to);
|
||||
} else {
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,50 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 10:35:19 +0100
|
||||
Subject: llvm50: avoid ++ on function->arg_begin()
|
||||
Patch-mainline: no
|
||||
|
||||
Starting with llvm 5, arguments of a function are not an iterator, but
|
||||
an array. So they cannot be incremented in-place. Use +1 to construct a
|
||||
new one instead.
|
||||
|
||||
Otherwise we see:
|
||||
../tools/klee/main.cpp:661:23: error: expression is not assignable
|
||||
Value *oldArgv = &*(++mainFn->arg_begin());
|
||||
^ ~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
tools/klee/main.cpp | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
|
||||
index c7dc517a8eee..883be83a4130 100644
|
||||
--- a/tools/klee/main.cpp
|
||||
+++ b/tools/klee/main.cpp
|
||||
@@ -655,7 +655,11 @@ static void initEnv(Module *mainModule) {
|
||||
Instruction *firstInst = &*(mainFn->begin()->begin());
|
||||
|
||||
Value *oldArgc = &*(mainFn->arg_begin());
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
|
||||
+ Value *oldArgv = &*(mainFn->arg_begin() + 1);
|
||||
+#else
|
||||
Value *oldArgv = &*(++mainFn->arg_begin());
|
||||
+#endif
|
||||
|
||||
AllocaInst* argcPtr =
|
||||
new AllocaInst(oldArgc->getType(), "argcPtr", firstInst);
|
||||
@@ -1057,7 +1061,11 @@ createLibCWrapper(std::vector<std::unique_ptr<llvm::Module>> &modules,
|
||||
args.push_back(
|
||||
llvm::ConstantExpr::getBitCast(inModuleRefernce, ft->getParamType(0)));
|
||||
args.push_back(&*(stub->arg_begin())); // argc
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
|
||||
+ args.push_back(&*(stub->arg_begin() + 1)); // argv
|
||||
+#else
|
||||
args.push_back(&*(++stub->arg_begin())); // argv
|
||||
+#endif
|
||||
args.push_back(Constant::getNullValue(ft->getParamType(3))); // app_init
|
||||
args.push_back(Constant::getNullValue(ft->getParamType(4))); // app_fini
|
||||
args.push_back(Constant::getNullValue(ft->getParamType(5))); // rtld_fini
|
||||
--
|
||||
2.18.0
|
||||
|
@ -81,5 +81,5 @@ index d39249df023f..b7f2b6ff347a 100644
|
||||
llvm::cl::PrintVersionMessage();
|
||||
}
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -33,5 +33,5 @@ index 4967a2fa8578..eef22fb81553 100644
|
||||
|
||||
using namespace llvm;
|
||||
--
|
||||
2.18.0
|
||||
2.19.0
|
||||
|
@ -1,39 +0,0 @@
|
||||
From: Jiri Slaby <jirislaby@gmail.com>
|
||||
Date: Mon, 15 Jan 2018 11:10:39 +0100
|
||||
Subject: llvm50: AllocaInst takes address space
|
||||
Patch-mainline: no
|
||||
|
||||
Add address space second parameter to new AllocaInst which is required
|
||||
since llvm 5's commit e0b3c335a27ae50c4f339ffb81c18662bc983e52.
|
||||
|
||||
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
---
|
||||
tools/klee/main.cpp | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
|
||||
index c0805f457717..d45a92160e59 100644
|
||||
--- a/tools/klee/main.cpp
|
||||
+++ b/tools/klee/main.cpp
|
||||
@@ -661,10 +661,18 @@ static void initEnv(Module *mainModule) {
|
||||
Value *oldArgv = &*(++mainFn->arg_begin());
|
||||
#endif
|
||||
|
||||
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
|
||||
+ const DataLayout &DL = mainFn->getParent()->getDataLayout();
|
||||
+ AllocaInst* argcPtr =
|
||||
+ new AllocaInst(oldArgc->getType(), DL.getAllocaAddrSpace(), "argcPtr", firstInst);
|
||||
+ AllocaInst* argvPtr =
|
||||
+ new AllocaInst(oldArgv->getType(), DL.getAllocaAddrSpace(), "argvPtr", firstInst);
|
||||
+#else
|
||||
AllocaInst* argcPtr =
|
||||
new AllocaInst(oldArgc->getType(), "argcPtr", firstInst);
|
||||
AllocaInst* argvPtr =
|
||||
new AllocaInst(oldArgv->getType(), "argvPtr", firstInst);
|
||||
+#endif
|
||||
|
||||
/* Insert void klee_init_env(int* argc, char*** argv) */
|
||||
std::vector<const Type*> params;
|
||||
--
|
||||
2.18.0
|
||||
|
@ -1,4 +1,4 @@
|
||||
<servicedata>
|
||||
<service name="tar_scm">
|
||||
<param name="url">git://github.com/klee/klee.git</param>
|
||||
<param name="changesrevision">b893d2158ce001da97f2c741ac8320b4c3b9ed53</param></service></servicedata>
|
||||
<param name="changesrevision">4efd7f6b443f187f5a844227339383ce5593e865</param></service></servicedata>
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7f46c097ddadb8c4b6a3ec70294b7a8d2c8d6451a67913d698813832695a046c
|
||||
size 597812
|
3
klee-1.4.0+20180920.tar.xz
Normal file
3
klee-1.4.0+20180920.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5bb676ee734644ba8e5b3cd125f30b92586db69d1ed1ca18976cc49160be5b31
|
||||
size 601236
|
69
klee.changes
69
klee.changes
@ -1,3 +1,72 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Sep 21 11:24:38 UTC 2018 - jslaby@suse.com
|
||||
|
||||
- Update to version 1.4.0+20180920:
|
||||
* Removed unused file
|
||||
* Removed unused --sym-files 0 0 argument from FD_Fail test and rewrote the test to use FileCheck instead of grep
|
||||
* Updated IoCtl test to use --sym-stdin instead of --sym-files 0 x to make stdin symbolic and removed unused arguments to main.
|
||||
* Updated DirSeek test to use --sym-stdin instead of --sym-files 0 x to make stdin symbolic.
|
||||
* Silence an uninitialized variable compiler warning (and a tiny formatting change)
|
||||
* travis: enable LLVM 4 testing
|
||||
* llvm4: gep_type_iterator has no operator*
|
||||
* llvm4: PointerType is not SequentialType
|
||||
* llvm4: use chrono helpers from LLVM
|
||||
* llvm4: errorOr and similar
|
||||
* llvm4: APFloat members are functions
|
||||
* llvm4: handle different header names
|
||||
* travis CI: add LLVM 3.9 build tests
|
||||
* llvm39: switch KLEE_RUNTIME_BUILD_TYPE to Debug+Asserts
|
||||
* cmake: find_llvm, fix libraries with llvm-config 3.9
|
||||
* llvm: make KLEE compile against LLVM 3.9
|
||||
* Add testcase to run POSIX environment and main without arguments
|
||||
* Add POSIX runtime as dependency for the test case
|
||||
* Unify the error message if that function has not been found.
|
||||
* Fix generation of global constructors and destructors
|
||||
* POSIX: Add invocation of klee_init_env into wrapper before calling main
|
||||
* Fix missing includes and declarations
|
||||
* Use FileCheck and LINE instead of grep if possible
|
||||
* llvm36.patch: fix build for newer glibc/gcc versions
|
||||
* runtime: fix memory error in canonicalize_file_name
|
||||
* Build on trusty without sudo - uses faster Docker infrastructure from TravisCI
|
||||
* Avoid Vararg non-deterministic allocation
|
||||
- removed (in upstream):
|
||||
* 0001-llvm-make-KLEE-compile-against-LLVM-3.9.patch
|
||||
* 0002-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch
|
||||
* 0003-llvm39-switch-KLEE_RUNTIME_BUILD_TYPE-to-Debug-Asser.patch
|
||||
* 0004-llvm40-handle-different-header-names.patch
|
||||
* 0005-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch
|
||||
* 0006-llvm40-errorOr-and-similar.patch
|
||||
* 0007-llvm-use-chrono-helpers-from-LLVM-4.0.patch
|
||||
* 0008-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch
|
||||
* 0009-llvm40-gep_type_iterator-has-no-operator.patch
|
||||
- removed (not needed):
|
||||
* 0017-llvm50-Intrinsic-objectsize-has-three-arguments.patch
|
||||
- renamed:
|
||||
* 0010-llvm50-avoid-on-function-arg_begin.patch
|
||||
-> 0001-llvm5-avoid-on-function-arg_begin.patch
|
||||
* 0011-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch
|
||||
-> 0002-llvm5-integerPartWidth-is-from-llvm-APFloatBase.patch
|
||||
* 0012-llvm50-handle-getOrInsertFunction-terminator.patch
|
||||
-> 0003-llvm5-handle-getOrInsertFunction-terminator.patch
|
||||
* 0013-llvm50-SwitchInst-case-functions-now-return-pointers.patch
|
||||
-> 0004-llvm5-SwitchInst-case-functions-now-return-pointers.patch
|
||||
* 0014-llvm50-handle-new-file_magic-s-location.patch
|
||||
-> 0005-llvm5-handle-new-file_magic-s-location.patch
|
||||
* 0015-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch
|
||||
-> 0006-llvm5-use-MutableArrayRef-for-APFloat-convertToInteg.patch
|
||||
* 0016-llvm50-AllocaInst-takes-address-space.patch
|
||||
-> 0007-llvm5-Intrinsic-objectsize-has-three-arguments.patch
|
||||
* 0018-llvm50-test-change-objectsize.patch
|
||||
-> 0008-llvm5-test-change-objectsize.patch
|
||||
* 0019-llvm50-test-add-disable-O0-optnone-to-O0.patch
|
||||
-> 0009-llvm5-test-add-disable-O0-optnone-to-O0.patch
|
||||
* 0020-llvm50-CallSite.paramHasAttr-is-indexed-from-0.patch
|
||||
-> 0010-llvm5-CallSite.paramHasAttr-is-indexed-from-0.patch
|
||||
* 0021-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
|
||||
-> 0011-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
|
||||
* 0022-llvm6-handle-headers-renaming.patch
|
||||
-> 0012-llvm6-handle-headers-renaming.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Sep 02 08:39:37 UTC 2018 - opensuse-packaging@opensuse.org
|
||||
|
||||
|
38
klee.spec
38
klee.spec
@ -19,7 +19,7 @@
|
||||
%define llvm_version_minor 0
|
||||
%define llvm_version %{llvm_version_major}
|
||||
|
||||
%define version_unconverted 1.4.0+20180829
|
||||
%define version_unconverted 1.4.0+20180920
|
||||
|
||||
%ifarch %{ix86} x86_64
|
||||
%define with_uclibc 1
|
||||
@ -31,7 +31,7 @@ Name: klee
|
||||
Summary: LLVM Execution Engine
|
||||
License: NCSA
|
||||
Group: Development/Languages/Other
|
||||
Version: 1.4.0+20180829
|
||||
Version: 1.4.0+20180920
|
||||
Release: 0
|
||||
Url: http://klee.github.io/
|
||||
Source0: %{name}-%{version}.tar.xz
|
||||
@ -39,28 +39,18 @@ Source1: %{name}-rpmlintrc
|
||||
Source2: https://raw.githubusercontent.com/llvm-mirror/llvm/release_%{llvm_version_major}%{llvm_version_minor}/utils/not/not.cpp
|
||||
Source3: https://raw.githubusercontent.com/llvm-mirror/llvm/release_%{llvm_version_major}%{llvm_version_minor}/utils/FileCheck/FileCheck.cpp
|
||||
|
||||
Patch201: 0001-llvm-make-KLEE-compile-against-LLVM-3.9.patch
|
||||
Patch202: 0002-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch
|
||||
Patch203: 0003-llvm39-switch-KLEE_RUNTIME_BUILD_TYPE-to-Debug-Asser.patch
|
||||
Patch204: 0004-llvm40-handle-different-header-names.patch
|
||||
Patch205: 0005-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch
|
||||
Patch206: 0006-llvm40-errorOr-and-similar.patch
|
||||
Patch207: 0007-llvm-use-chrono-helpers-from-LLVM-4.0.patch
|
||||
Patch208: 0008-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch
|
||||
Patch209: 0009-llvm40-gep_type_iterator-has-no-operator.patch
|
||||
Patch210: 0010-llvm50-avoid-on-function-arg_begin.patch
|
||||
Patch211: 0011-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch
|
||||
Patch212: 0012-llvm50-handle-getOrInsertFunction-terminator.patch
|
||||
Patch213: 0013-llvm50-SwitchInst-case-functions-now-return-pointers.patch
|
||||
Patch214: 0014-llvm50-handle-new-file_magic-s-location.patch
|
||||
Patch215: 0015-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch
|
||||
Patch216: 0016-llvm50-AllocaInst-takes-address-space.patch
|
||||
Patch217: 0017-llvm50-Intrinsic-objectsize-has-three-arguments.patch
|
||||
Patch218: 0018-llvm50-test-change-objectsize.patch
|
||||
Patch219: 0019-llvm50-test-add-disable-O0-optnone-to-O0.patch
|
||||
Patch220: 0020-llvm50-CallSite.paramHasAttr-is-indexed-from-0.patch
|
||||
Patch221: 0021-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
|
||||
Patch222: 0022-llvm6-handle-headers-renaming.patch
|
||||
Patch201: 0001-llvm5-avoid-on-function-arg_begin.patch
|
||||
Patch202: 0002-llvm5-integerPartWidth-is-from-llvm-APFloatBase.patch
|
||||
Patch203: 0003-llvm5-handle-getOrInsertFunction-terminator.patch
|
||||
Patch204: 0004-llvm5-SwitchInst-case-functions-now-return-pointers.patch
|
||||
Patch205: 0005-llvm5-handle-new-file_magic-s-location.patch
|
||||
Patch206: 0006-llvm5-use-MutableArrayRef-for-APFloat-convertToInteg.patch
|
||||
Patch207: 0007-llvm5-Intrinsic-objectsize-has-three-arguments.patch
|
||||
Patch208: 0008-llvm5-test-change-objectsize.patch
|
||||
Patch209: 0009-llvm5-test-add-disable-O0-optnone-to-O0.patch
|
||||
Patch210: 0010-llvm5-CallSite.paramHasAttr-is-indexed-from-0.patch
|
||||
Patch211: 0011-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
|
||||
Patch212: 0012-llvm6-handle-headers-renaming.patch
|
||||
|
||||
BuildRequires: clang%{llvm_version}
|
||||
BuildRequires: cmake
|
||||
|
Loading…
x
Reference in New Issue
Block a user