update to 1.4.0+20181026

OBS-URL: https://build.opensuse.org/package/show/devel:tools:statica/klee?expand=0&rev=58
This commit is contained in:
Jiri Slaby 2018-10-27 07:35:21 +00:00 committed by Git OBS Bridge
parent 611b54d753
commit 7b8f3e8bd6
17 changed files with 92 additions and 2193 deletions

View File

@ -1,36 +0,0 @@
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

View File

@ -1,32 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Mon, 15 Jan 2018 10:09:20 +0100
Subject: llvm5: integerPartWidth is from llvm::APFloatBase
Patch-mainline: no
Otherwise we see:
../lib/Expr/Expr.cpp:331:14: error: no member named 'integerPartWidth' in namespace 'llvm'; did you mean 'llvm::APFloatBase::integerPartWidth'?
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
lib/Expr/Expr.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/Expr/Expr.cpp b/lib/Expr/Expr.cpp
index a5c7f652e976..65e858c3336d 100644
--- a/lib/Expr/Expr.cpp
+++ b/lib/Expr/Expr.cpp
@@ -333,7 +333,11 @@ ref<Expr> ConstantExpr::fromMemory(void *address, Width width) {
// FIXME: what about machines without x87 support?
default:
return ConstantExpr::alloc(llvm::APInt(width,
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ (width+llvm::APFloatBase::integerPartWidth-1)/llvm::APFloatBase::integerPartWidth,
+#else
(width+llvm::integerPartWidth-1)/llvm::integerPartWidth,
+#endif
(const uint64_t*)address));
}
}
--
2.19.0

View File

@ -1,75 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Mon, 15 Jan 2018 10:27:54 +0100
Subject: llvm5: handle getOrInsertFunction terminator
Patch-mainline: no
llvm 5 does not terminate getOrInsertFunction parameters with NULL, take
care of that.
Since commit 9d54400bba7eb04bca80fce97fa170452d19eaf1.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
include/klee/Config/Version.h | 6 ++++++
lib/Module/Checks.cpp | 8 ++++----
lib/Module/IntrinsicCleaner.cpp | 3 ++-
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
--- a/include/klee/Config/Version.h
+++ b/include/klee/Config/Version.h
@@ -27,4 +27,10 @@
# define KLEE_LLVM_CL_VAL_END , clEnumValEnd
#endif
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+# define KLEE_LLVM_GOIF_TERMINATOR
+#else
+# define KLEE_LLVM_GOIF_TERMINATOR , NULL
+#endif
+
#endif
diff --git a/lib/Module/Checks.cpp b/lib/Module/Checks.cpp
index aac63e1d9854..406b3045e527 100644
--- a/lib/Module/Checks.cpp
+++ b/lib/Module/Checks.cpp
@@ -57,8 +57,8 @@ bool DivCheckPass::runOnModule(Module &M) {
if (!divZeroCheckFunction) {
Constant *fc = M.getOrInsertFunction("klee_div_zero_check",
Type::getVoidTy(ctx),
- Type::getInt64Ty(ctx),
- NULL);
+ Type::getInt64Ty(ctx)
+ KLEE_LLVM_GOIF_TERMINATOR);
divZeroCheckFunction = cast<Function>(fc);
}
@@ -118,8 +118,8 @@ bool OvershiftCheckPass::runOnModule(Module &M) {
Constant *fc = M.getOrInsertFunction("klee_overshift_check",
Type::getVoidTy(ctx),
Type::getInt64Ty(ctx),
- Type::getInt64Ty(ctx),
- NULL);
+ Type::getInt64Ty(ctx)
+ KLEE_LLVM_GOIF_TERMINATOR);
overshiftCheckFunction = cast<Function>(fc);
}
diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
index c48952c28004..ab16a2654492 100644
--- a/lib/Module/IntrinsicCleaner.cpp
+++ b/lib/Module/IntrinsicCleaner.cpp
@@ -210,7 +210,8 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) {
// Intrinsic instruction "llvm.trap" found. Directly lower it to
// a call of the abort() function.
Function *F = cast<Function>(
- M.getOrInsertFunction("abort", Type::getVoidTy(ctx), NULL));
+ M.getOrInsertFunction("abort", Type::getVoidTy(ctx)
+ KLEE_LLVM_GOIF_TERMINATOR));
F->setDoesNotReturn();
F->setDoesNotThrow();
--
2.19.0

View File

@ -1,35 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Mon, 15 Jan 2018 10:38:35 +0100
Subject: llvm5: SwitchInst case functions now return pointers
Patch-mainline: no
Starting llvm 5, SwitchInst->findCaseValue() now has to be dereferenced
using ->. So do so, otherwise we see:
../lib/Core/Executor.cpp:1598:38: error: no member named 'getCaseSuccessor' in 'llvm::SwitchInst::CaseIteratorImpl<llvm::SwitchInst::CaseHandle>'; did you mean to use '->' instead of '.'?
BasicBlock *caseSuccessor = i.getCaseSuccessor();
^
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
lib/Core/Executor.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
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) {
// switch to an internal rep.
llvm::IntegerType *Ty = cast<IntegerType>(si->getCondition()->getType());
ConstantInt *ci = ConstantInt::get(Ty, CE->getZExtValue());
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ unsigned index = si->findCaseValue(ci)->getSuccessorIndex();
+#else
unsigned index = si->findCaseValue(ci).getSuccessorIndex();
+#endif
transferToBasicBlock(si->getSuccessor(index), si->getParent(), state);
} else {
// Handle possible different branch targets
--
2.19.0

View File

@ -1,63 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Mon, 15 Jan 2018 10:42:53 +0100
Subject: llvm5: handle new file_magic's location
Patch-mainline: no
llvm 5, moved file_magic to BinaryFormat in commit
19ca2b0f9daed883c21730285d7f04424e5f5f88, so adapt to that.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
lib/Module/ModuleUtil.cpp | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
index bfec9e7dc7ff..ecc114460a3f 100644
--- a/lib/Module/ModuleUtil.cpp
+++ b/lib/Module/ModuleUtil.cpp
@@ -14,6 +14,9 @@
#include "klee/Internal/Support/ErrorHandling.h"
#include "../Core/SpecialFunctionHandler.h"
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+#include "llvm/BinaryFormat/Magic.h"
+#endif
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
@@ -381,13 +384,19 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
MemoryBuffer *Buffer = bufferErr->get();
#endif
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ file_magic magic = identify_magic(Buffer.getBuffer());
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
sys::fs::file_magic magic = sys::fs::identify_magic(Buffer.getBuffer());
#else
sys::fs::file_magic magic = sys::fs::identify_magic(Buffer->getBuffer());
#endif
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ if (magic == file_magic::bitcode) {
+#else
if (magic == sys::fs::file_magic::bitcode) {
+#endif
SMDiagnostic Err;
#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
std::unique_ptr<llvm::Module> module(parseIR(Buffer, Err, context));
@@ -404,7 +413,11 @@ bool klee::loadFile(const std::string &fileName, LLVMContext &context,
return true;
}
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ if (magic == file_magic::archive) {
+#else
if (magic == sys::fs::file_magic::archive) {
+#endif
#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
Expected<std::unique_ptr<object::Binary> > archOwner =
object::createBinary(Buffer, &context);
--
2.19.0

View File

@ -1,49 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Mon, 15 Jan 2018 11:07:47 +0100
Subject: llvm5: use MutableArrayRef for APFloat::convertToInteger
Patch-mainline: no
In llvm 5, since commit 957caa243d9270df37a566aedae3f1244e7b62ef, the
first parameter to APFloat::convertToInteger is MutableArrayRef. So
handle that.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
lib/Core/Executor.cpp | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
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) {
llvm::APFloat Arg(*fpWidthToSemantics(arg->getWidth()), arg->getAPValue());
uint64_t value = 0;
bool isExact = true;
- Arg.convertToInteger(&value, resultType, false,
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ auto valueRef = makeMutableArrayRef(value);
+#else
+ uint64_t *valueRef = &value;
+#endif
+ Arg.convertToInteger(valueRef, resultType, false,
llvm::APFloat::rmTowardZero, &isExact);
bindLocal(ki, state, ConstantExpr::alloc(value, resultType));
break;
@@ -2343,7 +2348,12 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
uint64_t value = 0;
bool isExact = true;
- Arg.convertToInteger(&value, resultType, true,
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ auto valueRef = makeMutableArrayRef(value);
+#else
+ uint64_t *valueRef = &value;
+#endif
+ Arg.convertToInteger(valueRef, resultType, true,
llvm::APFloat::rmTowardZero, &isExact);
bindLocal(ki, state, ConstantExpr::alloc(value, resultType));
break;
--
2.19.0

View File

@ -1,52 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Wed, 23 May 2018 15:01:34 +0200
Subject: llvm5: Intrinsic::objectsize has three arguments
Patch-mainline: no
Modify the IntrinsicCleaner accordingly.
We do not do anything with the third argument as we do not handle the
first argument in any way.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
lib/Module/IntrinsicCleaner.cpp | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
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) {
case Intrinsic::objectsize: {
// We don't know the size of an object in general so we replace
// with 0 or -1 depending on the second argument to the intrinsic.
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ assert(ii->getNumArgOperands() == 3 && "wrong number of arguments");
+#else
assert(ii->getNumArgOperands() == 2 && "wrong number of arguments");
+#endif
+
Value *minArg = ii->getArgOperand(1);
assert(minArg && "Failed to get second argument");
ConstantInt *minArgAsInt = dyn_cast<ConstantInt>(minArg);
assert(minArgAsInt && "Second arg is not a ConstantInt");
assert(minArgAsInt->getBitWidth() == 1 &&
"Second argument is not an i1");
+
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ auto nullArg = ii->getArgOperand(2);
+ assert(nullArg && "Failed to get second argument");
+ auto nullArgAsInt = dyn_cast<ConstantInt>(nullArg);
+ assert(nullArgAsInt && "Third arg is not a ConstantInt");
+ assert(nullArgAsInt->getBitWidth() == 1 &&
+ "Third argument is not an i1");
+ /* TODO should we do something with the 3rd argument? */
+#endif
+
Value *replacement = NULL;
IntegerType *intType = dyn_cast<IntegerType>(ii->getType());
assert(intType && "intrinsic does not have integer return type");
--
2.19.0

View File

@ -1,99 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Wed, 23 May 2018 14:54:48 +0200
Subject: llvm5: test, change objectsize
Patch-mainline: no
@llvm.objectsize has now three aguments, so fix the tests accordingly.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
test/Intrinsics/objectsize.leq49.ll | 38 +++++++++++++++++++++++++++++
test/Intrinsics/objectsize.ll | 9 ++++---
2 files changed, 43 insertions(+), 4 deletions(-)
create mode 100644 test/Intrinsics/objectsize.leq49.ll
diff --git a/test/Intrinsics/objectsize.leq49.ll b/test/Intrinsics/objectsize.leq49.ll
new file mode 100644
index 000000000000..1d184bdf292d
--- /dev/null
+++ b/test/Intrinsics/objectsize.leq49.ll
@@ -0,0 +1,38 @@
+; Unfortunately LLVM 2.9 has a different suffix for the ``llvm.objectsize`` instrinsic
+; so this LLVM IR fails to verify for that version.
+;
+; LLVM 3.7 requires a type as the first argument to 'load'
+; REQUIRES: geq-llvm-3.7
+; REQUIRES: lt-llvm-5.0
+; RUN: %llvmas %s -o=%t.bc
+; RUN: rm -rf %t.klee-out
+; RUN: %klee -exit-on-error --output-dir=%t.klee-out -disable-opt %t.bc
+; ModuleID = 'objectsize.c'
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @main() nounwind uwtable {
+entry:
+ %a = alloca i8*, align 8
+ %0 = load i8*, i8** %a, align 8
+ %1 = call i64 @llvm.objectsize.i64.p0i8(i8* %0, i1 true)
+ %cmp = icmp ne i64 %1, 0
+ br i1 %cmp, label %abort.block, label %continue.block
+
+continue.block:
+ %2 = load i8*, i8** %a, align 8
+ %3 = call i64 @llvm.objectsize.i64.p0i8(i8* %2, i1 false)
+ %cmp1 = icmp ne i64 %3, -1
+ br i1 %cmp1, label %abort.block, label %exit.block
+
+exit.block:
+ ret i32 0
+
+abort.block:
+ call void @abort()
+ unreachable
+}
+
+declare i64 @llvm.objectsize.i64.p0i8(i8*, i1) nounwind readnone
+
+declare void @abort() noreturn nounwind
diff --git a/test/Intrinsics/objectsize.ll b/test/Intrinsics/objectsize.ll
index 3a111f99c619..95070e66e45c 100644
--- a/test/Intrinsics/objectsize.ll
+++ b/test/Intrinsics/objectsize.ll
@@ -2,7 +2,8 @@
; so this LLVM IR fails to verify for that version.
;
; LLVM 3.7 requires a type as the first argument to 'load'
-; REQUIRES: geq-llvm-3.7
+; LLVM 5 added nullunknown parameter to @llvm.objectsize
+; REQUIRES: geq-llvm-5.0
; RUN: %llvmas %s -o=%t.bc
; RUN: rm -rf %t.klee-out
; RUN: %klee -exit-on-error --output-dir=%t.klee-out -disable-opt %t.bc
@@ -14,13 +15,13 @@ define i32 @main() nounwind uwtable {
entry:
%a = alloca i8*, align 8
%0 = load i8*, i8** %a, align 8
- %1 = call i64 @llvm.objectsize.i64.p0i8(i8* %0, i1 true)
+ %1 = call i64 @llvm.objectsize.i64.p0i8(i8* %0, i1 true, i1 false)
%cmp = icmp ne i64 %1, 0
br i1 %cmp, label %abort.block, label %continue.block
continue.block:
%2 = load i8*, i8** %a, align 8
- %3 = call i64 @llvm.objectsize.i64.p0i8(i8* %2, i1 false)
+ %3 = call i64 @llvm.objectsize.i64.p0i8(i8* %2, i1 false, i1 false)
%cmp1 = icmp ne i64 %3, -1
br i1 %cmp1, label %abort.block, label %exit.block
@@ -32,6 +33,6 @@ abort.block:
unreachable
}
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1) nounwind readnone
+declare i64 @llvm.objectsize.i64.p0i8(i8*, i1, i1) nounwind readnone
declare void @abort() noreturn nounwind
--
2.19.0

File diff suppressed because it is too large Load Diff

View File

@ -1,46 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Fri, 20 Jul 2018 10:06:29 +0200
Subject: llvm5: CallSite.paramHasAttr is indexed from 0
Patch-mainline: no
Since LLVM 5 commit 1f8f0490690b, CallSite.paramHasAttr is indexed from
0, so make sure we use correct indexing in klee. And use
CallSite.hasRetAttr for return attributes.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
lib/Core/Executor.cpp | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
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) {
CallSite(cast<CallInst>(caller)));
// XXX need to check other param attrs ?
- bool isSExt = cs.paramHasAttr(0, llvm::Attribute::SExt);
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ bool isSExt = cs.hasRetAttr(llvm::Attribute::SExt);
+#else
+ bool isSExt = cs.paramHasAttr(0, llvm::Attribute::SExt);
+#endif
if (isSExt) {
result = SExtExpr::create(result, to);
} else {
@@ -1837,7 +1841,11 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
if (from != to) {
// XXX need to check other param attrs ?
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+ bool isSExt = cs.paramHasAttr(i, llvm::Attribute::SExt);
+#else
bool isSExt = cs.paramHasAttr(i+1, llvm::Attribute::SExt);
+#endif
if (isSExt) {
arguments[i] = SExtExpr::create(arguments[i], to);
} else {
--
2.19.0

View File

@ -1,85 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Mon, 21 May 2018 15:12:44 +0200
Subject: llvm6: SetVersionPrinter now passes down a stream
Patch-mainline: no
I.e. klee::printVersion should now have a parameter -- the output
stream. Change both the prototype and the implementation to handle this
properly.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
include/klee/Internal/Support/PrintVersion.h | 8 +++++++
lib/Support/PrintVersion.cpp | 23 ++++++++++++++------
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/include/klee/Internal/Support/PrintVersion.h b/include/klee/Internal/Support/PrintVersion.h
index 2c375ad2b946..87f73a002914 100644
--- a/include/klee/Internal/Support/PrintVersion.h
+++ b/include/klee/Internal/Support/PrintVersion.h
@@ -10,8 +10,16 @@
#ifndef KLEE_PRINT_VERSION_H
#define KLEE_PRINT_VERSION_H
+#include "llvm/Support/raw_ostream.h"
+
+#include "klee/Config/Version.h"
+
namespace klee {
+#if LLVM_VERSION_CODE >= LLVM_VERSION(6, 0)
+ void printVersion(llvm::raw_ostream &OS);
+#else
void printVersion();
+#endif
}
#endif
diff --git a/lib/Support/PrintVersion.cpp b/lib/Support/PrintVersion.cpp
index d39249df023f..b7f2b6ff347a 100644
--- a/lib/Support/PrintVersion.cpp
+++ b/lib/Support/PrintVersion.cpp
@@ -9,25 +9,34 @@
#include "klee/Internal/Support/PrintVersion.h"
#include "klee/Config/config.h"
+#include "klee/Config/Version.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/CommandLine.h"
#include "klee/Config/CompileTimeInfo.h"
+#if LLVM_VERSION_CODE >= LLVM_VERSION(6, 0)
+void klee::printVersion(llvm::raw_ostream &OS)
+#else
void klee::printVersion()
+#endif
{
- llvm::outs() << PACKAGE_STRING " (" PACKAGE_URL ")\n";
+#if LLVM_VERSION_CODE < LLVM_VERSION(6, 0)
+ llvm::raw_ostream &OS = llvm::outs();
+#endif
+
+ OS << PACKAGE_STRING " (" PACKAGE_URL ")\n";
#ifdef KLEE_ENABLE_TIMESTAMP
- llvm::outs() << " Built " __DATE__ " (" __TIME__ ")\n";
+ OS << " Built " __DATE__ " (" __TIME__ ")\n";
#endif
- llvm::outs() << " Build mode: " << KLEE_BUILD_MODE "\n";
- llvm::outs() << " Build revision: ";
+ OS << " Build mode: " << KLEE_BUILD_MODE "\n";
+ OS << " Build revision: ";
#ifdef KLEE_BUILD_REVISION
- llvm::outs() << KLEE_BUILD_REVISION "\n";
+ OS << KLEE_BUILD_REVISION "\n";
#else
- llvm::outs() << "unknown\n";
+ OS << "unknown\n";
#endif
// Show LLVM version information
- llvm::outs() << "\n";
+ OS << "\n";
llvm::cl::PrintVersionMessage();
}
--
2.19.0

View File

@ -1,37 +0,0 @@
From: Jiri Slaby <jirislaby@gmail.com>
Date: Mon, 21 May 2018 15:14:41 +0200
Subject: llvm6: handle headers renaming
Patch-mainline: no
Some headers were moved from llvm/Target/ to llvm/CodeGen/. Handle that.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
lib/Module/RaiseAsm.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp
index 4967a2fa8578..eef22fb81553 100644
--- a/lib/Module/RaiseAsm.cpp
+++ b/lib/Module/RaiseAsm.cpp
@@ -18,10 +18,16 @@
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/TargetRegistry.h"
+#if LLVM_VERSION_CODE >= LLVM_VERSION(6, 0)
+#include "llvm/CodeGen/TargetLowering.h"
+#include "llvm/CodeGen/TargetSubtargetInfo.h"
+#include "llvm/Target/TargetMachine.h"
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
#include "llvm/Target/TargetLowering.h"
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetSubtargetInfo.h"
+#else
+#include "llvm/Target/TargetLowering.h"
#endif
using namespace llvm;
--
2.19.0

View File

@ -1,4 +1,4 @@
<servicedata>
<service name="tar_scm">
<param name="url">git://github.com/klee/klee.git</param>
<param name="changesrevision">4efd7f6b443f187f5a844227339383ce5593e865</param></service></servicedata>
<param name="changesrevision">581dca9276cacc690703cd4962e309661fc71c23</param></service></servicedata>

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5bb676ee734644ba8e5b3cd125f30b92586db69d1ed1ca18976cc49160be5b31
size 601236

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b89e6b770654058ce876d974d47e4c165da35d72441bd3efaccb815c23d2c817
size 618460

View File

@ -1,3 +1,87 @@
-------------------------------------------------------------------
Sat Oct 27 07:24:23 UTC 2018 - opensuse-packaging@opensuse.org
- Update to version 1.4.0+20181026:
* travis: enable LLVM 7 testing
* llvm7: handle new header files
* llvm7: adapt to new openFileForWrite
* llvm7: WriteBitcodeToFile takes Module &
* Added gen-bout tool to generate ktest file (file.bout) using specified concrete arguments and files.
* travis: enable LLVM 6 testing
* llvm6: handle headers renaming
* llvm6: SetVersionPrinter now passes down a stream
* travis: enable LLVM 5 testing
* llvm5: APInt->getSignBit -> getSignMask
* llvm5: CallSite.paramHasAttr is indexed from 0
* llvm5: test, add -disable-O0-optnone to -O0
* llvm5: test, change objectsize
* llvm5: Intrinsic::objectsize has three arguments
* llvm5: use MutableArrayRef for APFloat::convertToInteger
* llvm5: handle new file_magic's location
* llvm5: SwitchInst case functions now return pointers
* llvm5: handle getOrInsertFunction terminator
* llvm5: integerPartWidth is from llvm::APFloatBase
* llvm5: avoid ++ on function->arg_begin()
* Add testcase for shift check
* ShiftChecker: Instrument shift instructions only once
* ShiftChecker: Avoid unneeded checks
* ShiftCheck: Use llvm::Builder instead of Inst::Create*
* Add test case for div checker
* DivCheck do not instrument multiple times
* DivCheck Skip unneeded checks
* Use llvm::Builder for DivCheck instrumentation
* Introduce KLEEIRMetaData to manipulate LLVM-IR metadata
* Added lowering pass
* refactor klee_open_output_file to return std::unique_ptr
* use klee_open_output_file for uncompressed logs
* Updated an include to reflect a recent filename change
* Move unrelated function from ReadExpr class
* Avoid unsafe static downcasts
* Modernize code
* Move optimization specific headers away from the project include directory
* Clean-up headers
* Use std::unordered collections as we use C++11
* Remove unneeded externs
* Remove condition check before function invocation
* Move ConstantExpr check inside optimizeExpr function
* optimizeExpr: return the result as return value instead as function argument
* Make valueOnly parameter of optimizeExpr explicit
* Fixed compilation of array optimization patch with LLVM >= 4.0
* Added missing headers and clang-format the files
* Added support for KLEE value-based array optimization
* Added support for KLEE index-based array optimization
* tests: disable CompressedExprLogging on zlib-less systems
* Small changes to comments
* Added missing header to SolverCmdLine.h and clang-format it
* Renamed klee/CommandLine.h to klee/SolverCmdLine.h, since this file is meant to have only solver options.
* fix handling of failing external calls
* cmake/lit: add asan/non-asan, ubsan/non-ubsan flags
* cleanup headers, whitespaces, and types
* add support for klee-replay on OSX
* Workaround for flaky coverage
* kleeModule: always link irreader (required since llvm 3.3)
* remove obsolete dependency of kleeModule on kleeCore
* config.h.cmin: remove obsolete cmakedefine
* Marking resolve methods as const
* Refactored AddressSpace::resolve() by creating a new function AddressSpace::checkPointerInObject() that is called in both the forward and the backward searches. This makes the code more modular and removes a large part of duplicated code and should also address the non-deterministic coverage in the resolve() function which affects Codecov reports.
* Fix a crash when the last running state is terminated during merging
* Changed code to create up to 100 properly-numbered symbolic arguments, and add a corresponding check.
* Add checks for correct usage of the POSIX model, together with an associated test.
* Revert lit to 0.6.0 version, as 0.7.0 misbehaves
- removed (in upstream):
* 0001-llvm5-avoid-on-function-arg_begin.patch
* 0002-llvm5-integerPartWidth-is-from-llvm-APFloatBase.patch
* 0003-llvm5-handle-getOrInsertFunction-terminator.patch
* 0004-llvm5-SwitchInst-case-functions-now-return-pointers.patch
* 0005-llvm5-handle-new-file_magic-s-location.patch
* 0006-llvm5-use-MutableArrayRef-for-APFloat-convertToInteg.patch
* 0007-llvm5-Intrinsic-objectsize-has-three-arguments.patch
* 0008-llvm5-test-change-objectsize.patch
* 0009-llvm5-test-add-disable-O0-optnone-to-O0.patch
* 0010-llvm5-CallSite.paramHasAttr-is-indexed-from-0.patch
* 0011-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
* 0012-llvm6-handle-headers-renaming.patch
-------------------------------------------------------------------
Fri Sep 21 11:24:38 UTC 2018 - jslaby@suse.com

View File

@ -1,7 +1,7 @@
#
# spec file for package klee
#
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -15,11 +15,12 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define llvm_version_major 6
%define llvm_version_minor 0
%define llvm_version %{llvm_version_major}
%define version_unconverted 1.4.0+20180920
%define version_unconverted 1.4.0+20181026
%ifarch %{ix86} x86_64
%define with_uclibc 1
@ -31,7 +32,7 @@ Name: klee
Summary: LLVM Execution Engine
License: NCSA
Group: Development/Languages/Other
Version: 1.4.0+20180920
Version: 1.4.0+20181026
Release: 0
Url: http://klee.github.io/
Source0: %{name}-%{version}.tar.xz
@ -39,19 +40,6 @@ 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-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
BuildRequires: gperftools-devel