summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-06-03 15:27:15 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-06-03 15:27:15 +0000
commitce98452516bc0a743243dc83c04f442db29d2bed (patch)
treec722d3454c36568410e307e021914dca6a174173
parent937afa1fbb242538ce0112d5a8f0a88e0bad01f1 (diff)
downloadbcm5719-llvm-ce98452516bc0a743243dc83c04f442db29d2bed.tar.gz
bcm5719-llvm-ce98452516bc0a743243dc83c04f442db29d2bed.zip
[sancov] Delay opening dump file until the first module constructor.
llvm-svn: 210109
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc17
1 files changed, 9 insertions, 8 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
index 0094c61b546..e0f021f89b1 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
@@ -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);
OpenPOWER on IntegriCloud