From: Ismail Pazarbasi Date: Thu, 7 May 2015 22:17:48 +0000 (+0000) Subject: Revert "SanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init" X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=f31b4e9690b56e7552ca40d19dcc995cbf6e669e;hp=c8cfbdd7910185b19d854e9a00d52f7d7b19a0ad Revert "SanitizerCoverage: Use `createSanitizerCtor` to create ctor and call init" Will fix tomorrow. Unbreak build bots now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236786 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index 7133f77df97..0a820152c3c 100644 --- a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -156,6 +156,7 @@ class SanitizerCoverageModule : public ModulePass { Function *SanCovFunction; Function *SanCovWithCheckFunction; Function *SanCovIndirCallFunction; + Function *SanCovModuleInit; Function *SanCovTraceEnter, *SanCovTraceBB; Function *SanCovTraceCmpFunction; InlineAsm *EmptyAsm; @@ -183,6 +184,12 @@ bool SanitizerCoverageModule::runOnModule(Module &M) { Type *Int32PtrTy = PointerType::getUnqual(IRB.getInt32Ty()); Int64Ty = IRB.getInt64Ty(); + Function *CtorFunc = + Function::Create(FunctionType::get(VoidTy, false), + GlobalValue::InternalLinkage, kSanCovModuleCtorName, &M); + ReturnInst::Create(*C, BasicBlock::Create(*C, "", CtorFunc)); + appendToGlobalCtors(M, CtorFunc, kSanCtorAndDtorPriority); + SanCovFunction = checkSanitizerInterfaceFunction( M.getOrInsertFunction(kSanCovName, VoidTy, Int32PtrTy, nullptr)); SanCovWithCheckFunction = checkSanitizerInterfaceFunction( @@ -194,6 +201,10 @@ bool SanitizerCoverageModule::runOnModule(Module &M) { checkSanitizerInterfaceFunction(M.getOrInsertFunction( kSanCovTraceCmp, VoidTy, Int64Ty, Int64Ty, Int64Ty, nullptr)); + SanCovModuleInit = checkSanitizerInterfaceFunction(M.getOrInsertFunction( + kSanCovModuleInitName, VoidTy, Int32PtrTy, IntptrTy, + Int8PtrTy, Int8PtrTy, nullptr)); + SanCovModuleInit->setLinkage(Function::ExternalLinkage); // We insert an empty inline asm after cov callbacks to avoid callback merge. EmptyAsm = InlineAsm::get(FunctionType::get(IRB.getVoidTy(), false), StringRef(""), StringRef(""), @@ -259,21 +270,15 @@ bool SanitizerCoverageModule::runOnModule(Module &M) { new GlobalVariable(M, ModNameStrConst->getType(), true, GlobalValue::PrivateLinkage, ModNameStrConst); - ArrayRef InitArgs = { - IRB.CreatePointerCast(RealGuardArray, Int32PtrTy), + // Call __sanitizer_cov_module_init + IRB.SetInsertPoint(CtorFunc->getEntryBlock().getTerminator()); + IRB.CreateCall4( + SanCovModuleInit, IRB.CreatePointerCast(RealGuardArray, Int32PtrTy), ConstantInt::get(IntptrTy, N), Options.Use8bitCounters ? IRB.CreatePointerCast(RealEightBitCounterArray, Int8PtrTy) : Constant::getNullValue(Int8PtrTy), - IRB.CreatePointerCast(ModuleName, Int8PtrTy)}; - - Function *CtorFunc; - std::tie(CtorFunc, std::ignore) = createSanitizerCtorAndInitFunctions( - M, kSanCovModuleCtorName, kSanCovModuleInitName, - {Int32PtrTy, IntptrTy, Int8PtrTy, Int8PtrTy}, InitArgs); - - appendToGlobalCtors(M, CtorFunc, kSanCtorAndDtorPriority); - + IRB.CreatePointerCast(ModuleName, Int8PtrTy)); return true; }