From 4c8fabc7de30e17ef116b8f413f3a973c29cb56c Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Wed, 22 Feb 2017 16:10:21 +0100 Subject: llvm: stop using global context It was marked as deprecated long time ago and finally removed in LLVM 3.9. Remove all uses of getGlobalContext and create our own context. Propagate it all over the code then. [v2] use ctx, not C as name Signed-off-by: Jiri Slaby --- tools/klee/main.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'tools') diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp index e95522a0..505d259c 100644 --- a/tools/klee/main.cpp +++ b/tools/klee/main.cpp @@ -689,11 +689,12 @@ static int initEnv(Module *mainModule) { /* Insert void klee_init_env(int* argc, char*** argv) */ std::vector params; - params.push_back(Type::getInt32Ty(getGlobalContext())); - params.push_back(Type::getInt32Ty(getGlobalContext())); + LLVMContext &ctx = mainModule->getContext(); + params.push_back(Type::getInt32Ty(ctx)); + params.push_back(Type::getInt32Ty(ctx)); Function* initEnvFn = cast(mainModule->getOrInsertFunction("klee_init_env", - Type::getVoidTy(getGlobalContext()), + Type::getVoidTy(ctx), argcPtr->getType(), argvPtr->getType(), NULL)); @@ -1032,6 +1033,7 @@ static void replaceOrRenameFunction(llvm::Module *module, } } static llvm::Module *linkWithUclibc(llvm::Module *mainModule, StringRef libDir) { + LLVMContext &ctx = mainModule->getContext(); // Ensure that klee-uclibc exists SmallString<128> uclibcBCA(libDir); llvm::sys::path::append(uclibcBCA, KLEE_UCLIBC_BCA_NAME); @@ -1044,13 +1046,13 @@ static llvm::Module *linkWithUclibc(llvm::Module *mainModule, StringRef libDir) Function *f; // force import of __uClibc_main mainModule->getOrInsertFunction("__uClibc_main", - FunctionType::get(Type::getVoidTy(getGlobalContext()), + FunctionType::get(Type::getVoidTy(ctx), std::vector(), true)); // force various imports if (WithPOSIXRuntime) { - LLVM_TYPE_Q llvm::Type *i8Ty = Type::getInt8Ty(getGlobalContext()); + LLVM_TYPE_Q llvm::Type *i8Ty = Type::getInt8Ty(ctx); mainModule->getOrInsertFunction("realpath", PointerType::getUnqual(i8Ty), PointerType::getUnqual(i8Ty), @@ -1060,12 +1062,12 @@ static llvm::Module *linkWithUclibc(llvm::Module *mainModule, StringRef libDir) PointerType::getUnqual(i8Ty), NULL); mainModule->getOrInsertFunction("__fgetc_unlocked", - Type::getInt32Ty(getGlobalContext()), + Type::getInt32Ty(ctx), PointerType::getUnqual(i8Ty), NULL); mainModule->getOrInsertFunction("__fputc_unlocked", - Type::getInt32Ty(getGlobalContext()), - Type::getInt32Ty(getGlobalContext()), + Type::getInt32Ty(ctx), + Type::getInt32Ty(ctx), PointerType::getUnqual(i8Ty), NULL); } @@ -1130,11 +1132,11 @@ static llvm::Module *linkWithUclibc(llvm::Module *mainModule, StringRef libDir) std::vector fArgs; fArgs.push_back(ft->getParamType(1)); // argc fArgs.push_back(ft->getParamType(2)); // argv - Function *stub = Function::Create(FunctionType::get(Type::getInt32Ty(getGlobalContext()), fArgs, false), + Function *stub = Function::Create(FunctionType::get(Type::getInt32Ty(ctx), fArgs, false), GlobalVariable::ExternalLinkage, EntryPoint, mainModule); - BasicBlock *bb = BasicBlock::Create(getGlobalContext(), "entry", stub); + BasicBlock *bb = BasicBlock::Create(ctx, "entry", stub); std::vector args; args.push_back(llvm::ConstantExpr::getBitCast(userMainFn, @@ -1151,7 +1153,7 @@ static llvm::Module *linkWithUclibc(llvm::Module *mainModule, StringRef libDir) CallInst::Create(uclibcMainFn, args.begin(), args.end(), "", bb); #endif - new UnreachableInst(getGlobalContext(), bb); + new UnreachableInst(ctx, bb); klee_message("NOTE: Using klee-uclibc : %s", uclibcBCA.c_str()); return mainModule; @@ -1236,6 +1238,7 @@ int main(int argc, char **argv, char **envp) { // Load the bytecode... std::string ErrorMsg; + LLVMContext ctx; Module *mainModule = 0; #if LLVM_VERSION_CODE < LLVM_VERSION(3, 5) OwningPtr BufferPtr; @@ -1245,7 +1248,7 @@ int main(int argc, char **argv, char **envp) { ec.message().c_str()); } - mainModule = getLazyBitcodeModule(BufferPtr.get(), getGlobalContext(), &ErrorMsg); + mainModule = getLazyBitcodeModule(BufferPtr.get(), ctx, &ErrorMsg); if (mainModule) { if (mainModule->MaterializeAllPermanently(&ErrorMsg)) { @@ -1262,7 +1265,7 @@ int main(int argc, char **argv, char **envp) { klee_error("error loading program '%s': %s", InputFile.c_str(), Buffer.getError().message().c_str()); - auto mainModuleOrError = getLazyBitcodeModule(Buffer->get(), getGlobalContext()); + auto mainModuleOrError = getLazyBitcodeModule(Buffer->get(), ctx); if (!mainModuleOrError) { klee_error("error loading program '%s': %s", InputFile.c_str(), @@ -1387,7 +1390,7 @@ int main(int argc, char **argv, char **envp) { IOpts.MakeConcreteSymbolic = MakeConcreteSymbolic; KleeHandler *handler = new KleeHandler(pArgc, pArgv); Interpreter *interpreter = - theInterpreter = Interpreter::create(IOpts, handler); + theInterpreter = Interpreter::create(ctx, IOpts, handler); handler->setInterpreter(interpreter); for (int i=0; i