[compiler-rt] r210109 - [sancov] Delay opening dump file until the first module constructor.
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Tue Jun 3 08:27:16 PDT 2014
Author: eugenis
Date: Tue Jun 3 10:27:15 2014
New Revision: 210109
URL: http://llvm.org/viewvc/llvm-project?rev=210109&view=rev
Log:
[sancov] Delay opening dump file until the first module constructor.
Modified:
compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc?rev=210109&r1=210108&r2=210109&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc Tue Jun 3 10:27:15 2014
@@ -85,12 +85,12 @@ class CoverageData {
int pc_fd;
StaticSpinMutex mu;
- void DirectInit();
+ void DirectOpen();
};
static CoverageData coverage_data;
-void CoverageData::DirectInit() {
+void CoverageData::DirectOpen() {
InternalScopedString path(1024);
internal_snprintf((char *)path.data(), path.size(), "%s/%zd.sancov.raw",
common_flags()->coverage_dir, internal_getpid());
@@ -100,9 +100,7 @@ void CoverageData::DirectInit() {
Die();
}
- atomic_store(&pc_array_size, 0, memory_order_relaxed);
pc_array_mapped_size = 0;
-
CovUpdateMapping();
}
@@ -110,20 +108,23 @@ void CoverageData::Init() {
pc_array = reinterpret_cast<uptr *>(
MmapNoReserveOrDie(sizeof(uptr) * kPcArrayMaxSize, "CovInit"));
if (common_flags()->coverage_direct) {
- DirectInit();
+ atomic_store(&pc_array_size, 0, memory_order_relaxed);
+ atomic_store(&pc_array_index, 0, memory_order_relaxed);
} else {
pc_fd = 0;
atomic_store(&pc_array_size, kPcArrayMaxSize, memory_order_relaxed);
+ atomic_store(&pc_array_index, 0, memory_order_relaxed);
}
}
// Extend coverage PC array to fit additional npcs elements.
void CoverageData::Extend(uptr npcs) {
- // If pc_fd=0, pc array is a huge anonymous mapping that does not need to be
- // resized.
- if (!pc_fd) return;
+ if (!common_flags()->coverage_direct) return;
SpinMutexLock l(&mu);
+ if (!pc_fd) DirectOpen();
+ CHECK(pc_fd);
+
uptr size = atomic_load(&pc_array_size, memory_order_relaxed);
size += npcs * sizeof(uptr);
More information about the llvm-commits
mailing list