diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/asan/asan_rtl.cc | 2 | ||||
-rw-r--r-- | lib/lsan/lsan_common.cc | 2 | ||||
-rw-r--r-- | lib/msan/msan.cc | 1 | ||||
-rw-r--r-- | lib/msan/msan.h | 1 | ||||
-rw-r--r-- | lib/msan/msan_linux.cc | 5 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.cc | 6 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.h | 1 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_nolibc.cc | 3 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_coverage_libcdep.cc | 4 |
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, |