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
This commit is contained in:
Ismail Pazarbasi
2015-05-07 22:17:48 +00:00
parent c8cfbdd791
commit f31b4e9690

View File

@@ -156,6 +156,7 @@ class SanitizerCoverageModule : public ModulePass {
Function *SanCovFunction; Function *SanCovFunction;
Function *SanCovWithCheckFunction; Function *SanCovWithCheckFunction;
Function *SanCovIndirCallFunction; Function *SanCovIndirCallFunction;
Function *SanCovModuleInit;
Function *SanCovTraceEnter, *SanCovTraceBB; Function *SanCovTraceEnter, *SanCovTraceBB;
Function *SanCovTraceCmpFunction; Function *SanCovTraceCmpFunction;
InlineAsm *EmptyAsm; InlineAsm *EmptyAsm;
@@ -183,6 +184,12 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
Type *Int32PtrTy = PointerType::getUnqual(IRB.getInt32Ty()); Type *Int32PtrTy = PointerType::getUnqual(IRB.getInt32Ty());
Int64Ty = IRB.getInt64Ty(); 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( SanCovFunction = checkSanitizerInterfaceFunction(
M.getOrInsertFunction(kSanCovName, VoidTy, Int32PtrTy, nullptr)); M.getOrInsertFunction(kSanCovName, VoidTy, Int32PtrTy, nullptr));
SanCovWithCheckFunction = checkSanitizerInterfaceFunction( SanCovWithCheckFunction = checkSanitizerInterfaceFunction(
@@ -194,6 +201,10 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
checkSanitizerInterfaceFunction(M.getOrInsertFunction( checkSanitizerInterfaceFunction(M.getOrInsertFunction(
kSanCovTraceCmp, VoidTy, Int64Ty, Int64Ty, Int64Ty, nullptr)); 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. // We insert an empty inline asm after cov callbacks to avoid callback merge.
EmptyAsm = InlineAsm::get(FunctionType::get(IRB.getVoidTy(), false), EmptyAsm = InlineAsm::get(FunctionType::get(IRB.getVoidTy(), false),
StringRef(""), StringRef(""), StringRef(""), StringRef(""),
@@ -259,21 +270,15 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
new GlobalVariable(M, ModNameStrConst->getType(), true, new GlobalVariable(M, ModNameStrConst->getType(), true,
GlobalValue::PrivateLinkage, ModNameStrConst); GlobalValue::PrivateLinkage, ModNameStrConst);
ArrayRef<Value *> InitArgs = { // Call __sanitizer_cov_module_init
IRB.CreatePointerCast(RealGuardArray, Int32PtrTy), IRB.SetInsertPoint(CtorFunc->getEntryBlock().getTerminator());
IRB.CreateCall4(
SanCovModuleInit, IRB.CreatePointerCast(RealGuardArray, Int32PtrTy),
ConstantInt::get(IntptrTy, N), ConstantInt::get(IntptrTy, N),
Options.Use8bitCounters Options.Use8bitCounters
? IRB.CreatePointerCast(RealEightBitCounterArray, Int8PtrTy) ? IRB.CreatePointerCast(RealEightBitCounterArray, Int8PtrTy)
: Constant::getNullValue(Int8PtrTy), : Constant::getNullValue(Int8PtrTy),
IRB.CreatePointerCast(ModuleName, 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);
return true; return true;
} }