[llvm] r275449 - [sanitizer-coverage] make sure that calls to __sanitizer_cov_trace_pc are not merged (otherwise different calls get the same PC and confuse fuzzers)

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 14 10:59:01 PDT 2016


Author: kcc
Date: Thu Jul 14 12:59:01 2016
New Revision: 275449

URL: http://llvm.org/viewvc/llvm-project?rev=275449&view=rev
Log:
[sanitizer-coverage] make sure that calls to __sanitizer_cov_trace_pc are not merged (otherwise different calls get the same PC and confuse fuzzers)

Modified:
    llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
    llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll

Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=275449&r1=275448&r2=275449&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Thu Jul 14 12:59:01 2016
@@ -544,7 +544,8 @@ void SanitizerCoverageModule::InjectCove
   Type *Int32PtrTy = PointerType::getUnqual(IRB.getInt32Ty());
   GuardP = IRB.CreateIntToPtr(GuardP, Int32PtrTy);
   if (Options.TracePC) {
-    IRB.CreateCall(SanCovTracePC);
+    IRB.CreateCall(SanCovTracePC); // gets the PC using GET_CALLER_PC.
+    IRB.CreateCall(EmptyAsm, {}); // Avoids callback merge.
   } else if (Options.TraceBB) {
     IRB.CreateCall(IsEntryBB ? SanCovTraceEnter : SanCovTraceBB, GuardP);
   } else if (UseCalls) {

Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll?rev=275449&r1=275448&r2=275449&view=diff
==============================================================================
--- llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll (original)
+++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll Thu Jul 14 12:59:01 2016
@@ -6,7 +6,7 @@
 ; RUN: opt < %s -sancov -sanitizer-coverage-level=2 -sanitizer-coverage-block-threshold=1  -S | FileCheck %s --check-prefix=CHECK_WITH_CHECK
 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-block-threshold=10 -S | FileCheck %s --check-prefix=CHECK3
 ; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -S | FileCheck %s --check-prefix=CHECK4
-; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC_INDIR
+; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC
 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-8bit-counters=1  -S | FileCheck %s --check-prefix=CHECK-8BIT
 
 ; RUN: opt < %s -sancov -sanitizer-coverage-level=2 -sanitizer-coverage-block-threshold=10 \
@@ -120,10 +120,15 @@ entry:
 ; CHECK4-NOT: call void @__sanitizer_cov_indir_call16({{.*}},[[CACHE]])
 ; CHECK4: ret void
 
-; CHECK_TRACE_PC_INDIR-LABEL: define void @CallViaVptr
-; CHECK_TRACE_PC_INDIR: call void @__sanitizer_cov_trace_pc_indir
-; CHECK_TRACE_PC_INDIR: call void @__sanitizer_cov_trace_pc_indir
-; CHECK_TRACE_PC_INDIR: ret void
+; CHECK_TRACE_PC-LABEL: define void @foo
+; CHECK_TRACE_PC: call void @__sanitizer_cov_trace_pc
+; CHECK_TRACE_PC: call void asm sideeffect "", ""()
+; CHECK_TRACE_PC: ret void
+
+; CHECK_TRACE_PC-LABEL: define void @CallViaVptr
+; CHECK_TRACE_PC: call void @__sanitizer_cov_trace_pc_indir
+; CHECK_TRACE_PC: call void @__sanitizer_cov_trace_pc_indir
+; CHECK_TRACE_PC: ret void
 
 define void @call_unreachable() uwtable sanitize_address {
 entry:




More information about the llvm-commits mailing list