From f0d7daa972a136d4e1dd1869d4908f3eef331d10 Mon Sep 17 00:00:00 2001 From: Matt Morehouse Date: Tue, 11 Sep 2018 21:15:41 +0000 Subject: [PATCH] Revert "[SanitizerCoverage] Create comdat for global arrays." This reverts r341987 since it will cause trouble when there's a module ID collision. llvm-svn: 341995 --- .../Instrumentation/SanitizerCoverage.cpp | 40 ++++++++-------------- .../SanitizerCoverage/div-tracing.ll | 6 ++-- .../SanitizerCoverage/gep-tracing.ll | 2 +- .../SanitizerCoverage/inline-8bit-counters.ll | 2 +- .../Instrumentation/SanitizerCoverage/pc-table.ll | 2 +- .../Instrumentation/SanitizerCoverage/tracing.ll | 2 +- 6 files changed, 21 insertions(+), 33 deletions(-) diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index 5e7801f..1f97e90 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -571,34 +571,11 @@ GlobalVariable *SanitizerCoverageModule::CreateFunctionLocalArrayInSection( auto Array = new GlobalVariable( *CurModule, ArrayTy, false, GlobalVariable::PrivateLinkage, Constant::getNullValue(ArrayTy), "__sancov_gen_"); - if (auto Comdat = F.getComdat()) { + if (auto Comdat = F.getComdat()) Array->setComdat(Comdat); - } else if (TargetTriple.isOSBinFormatELF()) { - // TODO: Refactor into a helper function and use it in ASan. - assert(F.hasName()); - std::string Name = F.getName(); - if (F.hasLocalLinkage()) { - std::string ModuleId = getUniqueModuleId(CurModule); - Name += ModuleId.empty() ? CurModule->getModuleIdentifier() : ModuleId; - } - Comdat = CurModule->getOrInsertComdat(Name); - // Make this IMAGE_COMDAT_SELECT_NODUPLICATES on COFF. Also upgrade private - // linkage to internal linkage so that a symbol table entry is emitted. This - // is necessary in order to create the comdat group. - if (TargetTriple.isOSBinFormatCOFF()) { - Comdat->setSelectionKind(Comdat::NoDuplicates); - if (F.hasPrivateLinkage()) - F.setLinkage(GlobalValue::InternalLinkage); - } - F.setComdat(Comdat); - Array->setComdat(Comdat); - } Array->setSection(getSectionName(Section)); Array->setAlignment(Ty->isPointerTy() ? DL->getPointerSize() : Ty->getPrimitiveSizeInBits() / 8); - GlobalsToAppendToCompilerUsed.push_back(Array); - MDNode *MD = MDNode::get(F.getContext(), ValueAsMetadata::get(&F)); - Array->addMetadata(LLVMContext::MD_associated, *MD); return Array; } @@ -636,12 +613,23 @@ void SanitizerCoverageModule::CreateFunctionLocalArrays( FunctionGuardArray = CreateFunctionLocalArrayInSection( AllBlocks.size(), F, Int32Ty, SanCovGuardsSectionName); GlobalsToAppendToUsed.push_back(FunctionGuardArray); + GlobalsToAppendToCompilerUsed.push_back(FunctionGuardArray); + MDNode *MD = MDNode::get(F.getContext(), ValueAsMetadata::get(&F)); + FunctionGuardArray->addMetadata(LLVMContext::MD_associated, *MD); } - if (Options.Inline8bitCounters) + if (Options.Inline8bitCounters) { Function8bitCounterArray = CreateFunctionLocalArrayInSection( AllBlocks.size(), F, Int8Ty, SanCovCountersSectionName); - if (Options.PCTable) + GlobalsToAppendToCompilerUsed.push_back(Function8bitCounterArray); + MDNode *MD = MDNode::get(F.getContext(), ValueAsMetadata::get(&F)); + Function8bitCounterArray->addMetadata(LLVMContext::MD_associated, *MD); + } + if (Options.PCTable) { FunctionPCsArray = CreatePCArray(F, AllBlocks); + GlobalsToAppendToCompilerUsed.push_back(FunctionPCsArray); + MDNode *MD = MDNode::get(F.getContext(), ValueAsMetadata::get(&F)); + FunctionPCsArray->addMetadata(LLVMContext::MD_associated, *MD); + } } bool SanitizerCoverageModule::InjectCoverage(Function &F, diff --git a/llvm/test/Instrumentation/SanitizerCoverage/div-tracing.ll b/llvm/test/Instrumentation/SanitizerCoverage/div-tracing.ll index 0de2ddf..aee872c 100644 --- a/llvm/test/Instrumentation/SanitizerCoverage/div-tracing.ll +++ b/llvm/test/Instrumentation/SanitizerCoverage/div-tracing.ll @@ -10,7 +10,7 @@ entry: ret i32 %div } -; CHECK-LABEL: @div_a_b +; CHECK-LABEL: div_a_b ; CHECK: call void @__sanitizer_cov_trace_div4(i32 %b) ; CHECK: ret @@ -21,7 +21,7 @@ entry: ret i32 %div } -; CHECK-LABEL: @div_a_10 +; CHECK-LABEL: div_a_10 ; CHECK-NOT: __sanitizer_cov_trace_div ; CHECK: ret @@ -31,7 +31,7 @@ entry: ret i64 %div } -; CHECK-LABEL: @div_a_b_64 +; CHECK-LABEL: div_a_b ; CHECK: call void @__sanitizer_cov_trace_div8(i64 %b) ; CHECK: ret diff --git a/llvm/test/Instrumentation/SanitizerCoverage/gep-tracing.ll b/llvm/test/Instrumentation/SanitizerCoverage/gep-tracing.ll index ac6af4b..f305f49 100644 --- a/llvm/test/Instrumentation/SanitizerCoverage/gep-tracing.ll +++ b/llvm/test/Instrumentation/SanitizerCoverage/gep-tracing.ll @@ -26,7 +26,7 @@ entry: ret void } -; CHECK-LABEL: define void @gep_2([1000 x i32]* nocapture %a, i32 %i, i32 %j) +; CHECK-LABEL: define void @gep_2([1000 x i32]* nocapture %a, i32 %i, i32 %j) { ; CHECK: call void @__sanitizer_cov_trace_gep(i64 %idxprom1) ; CHECK: call void @__sanitizer_cov_trace_gep(i64 %idxprom) ; CHECK: ret void diff --git a/llvm/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll b/llvm/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll index 8814167..597f77f 100644 --- a/llvm/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll +++ b/llvm/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll @@ -5,7 +5,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3 target triple = "x86_64-unknown-linux-gnu" define void @foo() { entry: -; CHECK: section "__sancov_cntrs", comdat($foo), align 1 +; CHECK: section "__sancov_cntrs", align 1 ; CHECK: %0 = load i8, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @__sancov_gen_, i64 0, i64 0), !nosanitize ; CHECK: %1 = add i8 %0, 1 ; CHECK: store i8 %1, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @__sancov_gen_, i64 0, i64 0), !nosanitize diff --git a/llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll b/llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll index 888277a..7b9b2fa 100644 --- a/llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ b/llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -17,7 +17,7 @@ entry: ret void } -; CHECK: private constant [6 x i64*] [{{.*}}@foo{{.*}}blockaddress{{.*}}blockaddress{{.*}}], section "__sancov_pcs", comdat($foo), align 8 +; CHECK: private constant [6 x i64*] [{{.*}}@foo{{.*}}blockaddress{{.*}}blockaddress{{.*}}], section "__sancov_pcs", align 8 ; CHECK: define internal void @sancov.module_ctor ; CHECK: call void @__sanitizer_cov ; CHECK: call void @__sanitizer_cov_pcs_init diff --git a/llvm/test/Instrumentation/SanitizerCoverage/tracing.ll b/llvm/test/Instrumentation/SanitizerCoverage/tracing.ll index 2982f95..860904c 100644 --- a/llvm/test/Instrumentation/SanitizerCoverage/tracing.ll +++ b/llvm/test/Instrumentation/SanitizerCoverage/tracing.ll @@ -32,7 +32,7 @@ entry: ; CHECK_PC: ret void ; CHECK_PC-NOT: call void @__sanitizer_cov_module_init -; CHECK_PC_GUARD: section "__sancov_guards", comdat($foo), align 4 +; CHECK_PC_GUARD: section "__sancov_guards", align 4 ; CHECK_PC_GUARD-LABEL: define void @foo ; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard ; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard -- 2.7.4