summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/asan/asan_rtl.cc2
-rw-r--r--lib/lsan/lsan_common.cc2
-rw-r--r--lib/msan/msan.cc1
-rw-r--r--lib/msan/msan.h1
-rw-r--r--lib/msan/msan_linux.cc5
-rw-r--r--lib/sanitizer_common/sanitizer_common.cc6
-rw-r--r--lib/sanitizer_common/sanitizer_common.h1
-rw-r--r--lib/sanitizer_common/sanitizer_common_nolibc.cc3
-rw-r--r--lib/sanitizer_common/sanitizer_coverage_libcdep.cc4
9 files changed, 12 insertions, 13 deletions
diff --git a/lib/asan/asan_rtl.cc b/lib/asan/asan_rtl.cc
index ad5a8eb98..5dcfcc871 100644
--- a/lib/asan/asan_rtl.cc
+++ b/lib/asan/asan_rtl.cc
@@ -56,8 +56,6 @@ static void AsanDie() {
UnmapOrDie((void*)kLowShadowBeg, kHighShadowEnd - kLowShadowBeg);
}
}
- if (common_flags()->coverage)
- __sanitizer_cov_dump();
if (flags()->abort_on_error)
Abort();
}
diff --git a/lib/lsan/lsan_common.cc b/lib/lsan/lsan_common.cc
index 243dd55bb..c3f78d17d 100644
--- a/lib/lsan/lsan_common.cc
+++ b/lib/lsan/lsan_common.cc
@@ -445,8 +445,6 @@ void DoLeakCheck() {
return;
}
if (common_flags()->exitcode) {
- if (common_flags()->coverage)
- __sanitizer_cov_dump();
Die();
}
}
diff --git a/lib/msan/msan.cc b/lib/msan/msan.cc
index 0ba7f32bb..ce4b1a5dd 100644
--- a/lib/msan/msan.cc
+++ b/lib/msan/msan.cc
@@ -375,7 +375,6 @@ void __msan_init() {
msan_init_is_running = 1;
SanitizerToolName = "MemorySanitizer";
- SetDieCallback(MsanDie);
InitTlsSize();
CacheBinaryName();
diff --git a/lib/msan/msan.h b/lib/msan/msan.h
index 3a6e1a709..e4344e564 100644
--- a/lib/msan/msan.h
+++ b/lib/msan/msan.h
@@ -167,7 +167,6 @@ struct SymbolizerScope {
~SymbolizerScope() { ExitSymbolizer(); }
};
-void MsanDie();
void PrintWarning(uptr pc, uptr bp);
void PrintWarningWithOrigin(uptr pc, uptr bp, u32 origin);
diff --git a/lib/msan/msan_linux.cc b/lib/msan/msan_linux.cc
index f4b48b7ab..7f6cb75ff 100644
--- a/lib/msan/msan_linux.cc
+++ b/lib/msan/msan_linux.cc
@@ -151,11 +151,6 @@ bool InitShadow(bool init_origins) {
return true;
}
-void MsanDie() {
- if (common_flags()->coverage)
- __sanitizer_cov_dump();
-}
-
static void MsanAtExit(void) {
if (flags()->print_stats && (flags()->atexit || msan_report_count > 0))
ReportStats();
diff --git a/lib/sanitizer_common/sanitizer_common.cc b/lib/sanitizer_common/sanitizer_common.cc
index fb0cee0f4..5defbb271 100644
--- a/lib/sanitizer_common/sanitizer_common.cc
+++ b/lib/sanitizer_common/sanitizer_common.cc
@@ -118,6 +118,12 @@ DieCallbackType GetDieCallback() {
}
void NORETURN Die() {
+#if !SANITIZER_GO
+ // Dump coverage before invoking user callback, in case it calls abort() or
+ // _exit() itself.
+ if (common_flags()->coverage)
+ DumpCoverage();
+#endif // !SANITIZER_GO
if (UserDieCallback)
UserDieCallback();
if (InternalDieCallback)
diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h
index 9aa69c5a4..3b93bc97c 100644
--- a/lib/sanitizer_common/sanitizer_common.h
+++ b/lib/sanitizer_common/sanitizer_common.h
@@ -283,6 +283,7 @@ void PrepareForSandboxing(__sanitizer_sandbox_arguments *args);
void CovPrepareForSandboxing(__sanitizer_sandbox_arguments *args);
void SetSandboxingCallback(void (*f)());
+void DumpCoverage();
void CoverageUpdateMapping();
void CovBeforeFork();
void CovAfterFork(int child_pid);
diff --git a/lib/sanitizer_common/sanitizer_common_nolibc.cc b/lib/sanitizer_common/sanitizer_common_nolibc.cc
index 7d87b591c..a761910c5 100644
--- a/lib/sanitizer_common/sanitizer_common_nolibc.cc
+++ b/lib/sanitizer_common/sanitizer_common_nolibc.cc
@@ -20,4 +20,5 @@ namespace __sanitizer {
void WriteToSyslog(const char *buffer) {}
#endif
-}
+void DumpCoverage() {}
+} // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
index eb3a3d56c..a5f014514 100644
--- a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
@@ -824,6 +824,8 @@ fd_t MaybeOpenCovFile(const char *name) {
return CovOpenFile(&path, true /* packed */, name);
}
+void DumpCoverage() { coverage_data.DumpAll(); }
+
void CovBeforeFork() {
coverage_data.BeforeFork();
}
@@ -877,7 +879,7 @@ SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_init() {
coverage_data.Init();
}
SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump() {
- coverage_data.DumpAll();
+ DumpCoverage();
}
SANITIZER_INTERFACE_ATTRIBUTE void
__sanitizer_cov_module_init(s32 *guards, uptr npcs, u8 *counters,