[sancov] Fix unspecified constructor order between sancov and asan.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Tue, 27 Jan 2015 15:01:22 +0000 (15:01 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Tue, 27 Jan 2015 15:01:22 +0000 (15:01 +0000)
Sanitizer coverage constructor must run after asan constructor (for each DSO).
Bump constructor priority to guarantee that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227195 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Instrumentation/SanitizerCoverage.cpp
test/Instrumentation/SanitizerCoverage/coverage.ll

index b221ef8f7e6e5321306212d05aa52ac28499c452..afff81cdc594b1a418510a9f84de083be0350bdf 100644 (file)
@@ -59,7 +59,7 @@ static const char *const kSanCovIndirCallName = "__sanitizer_cov_indir_call16";
 static const char *const kSanCovTraceEnter = "__sanitizer_cov_trace_func_enter";
 static const char *const kSanCovTraceBB = "__sanitizer_cov_trace_basic_block";
 static const char *const kSanCovModuleCtorName = "sancov.module_ctor";
-static const uint64_t    kSanCtorAndDtorPriority = 1;
+static const uint64_t    kSanCtorAndDtorPriority = 2;
 
 static cl::opt<int> ClCoverageLevel("sanitizer-coverage-level",
        cl::desc("Sanitizer Coverage. 0: none, 1: entry block, 2: all blocks, "
index 77e781e5474a1a15072c1f517e7c6bacf73abfb0..ae93a0b2e39e1e8d42bd8acbae36c51acfd70ca8 100644 (file)
@@ -29,6 +29,10 @@ entry:
   ret void
 }
 
+; CHECK0-NOT: @llvm.global_ctors = {{.*}}{ i32 2, void ()* @sancov.module_ctor }
+; CHECK1: @llvm.global_ctors = {{.*}}{ i32 2, void ()* @sancov.module_ctor }
+; CHECK2: @llvm.global_ctors = {{.*}}{ i32 2, void ()* @sancov.module_ctor }
+
 ; CHECK0-NOT: call void @__sanitizer_cov(
 ; CHECK0-NOT: call void @__sanitizer_cov_module_init(