From ab229c13a65bbec8f3b489ce62d1bbfbfad05bbd Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Mon, 24 Aug 2015 22:21:47 +0000 Subject: [Sanitizer] Dump coverage if we're killing the program with __sanitizer::Die(). Previously we had to call __sanitizer_cov_dump() from tool-specific callbacks - instead, let sanitizer_common library handle this in a single place. This is a re-application of r245770, with slightly different approach taken. llvm-svn: 245890 --- compiler-rt/lib/asan/asan_rtl.cc | 2 -- compiler-rt/lib/lsan/lsan_common.cc | 2 -- compiler-rt/lib/msan/msan.cc | 1 - compiler-rt/lib/msan/msan.h | 1 - compiler-rt/lib/msan/msan_linux.cc | 5 ----- compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc | 6 ++++++ 6 files changed, 6 insertions(+), 11 deletions(-) (limited to 'compiler-rt') diff --git a/compiler-rt/lib/asan/asan_rtl.cc b/compiler-rt/lib/asan/asan_rtl.cc index e246abd5eeb..16d5061fb07 100644 --- a/compiler-rt/lib/asan/asan_rtl.cc +++ b/compiler-rt/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/compiler-rt/lib/lsan/lsan_common.cc b/compiler-rt/lib/lsan/lsan_common.cc index 243dd55bb2b..c3f78d17d31 100644 --- a/compiler-rt/lib/lsan/lsan_common.cc +++ b/compiler-rt/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/compiler-rt/lib/msan/msan.cc b/compiler-rt/lib/msan/msan.cc index 1b116815f94..ce4b1a5ddf3 100644 --- a/compiler-rt/lib/msan/msan.cc +++ b/compiler-rt/lib/msan/msan.cc @@ -375,7 +375,6 @@ void __msan_init() { msan_init_is_running = 1; SanitizerToolName = "MemorySanitizer"; - AddDieCallback(MsanDie); InitTlsSize(); CacheBinaryName(); diff --git a/compiler-rt/lib/msan/msan.h b/compiler-rt/lib/msan/msan.h index 3a6e1a7096b..e4344e56468 100644 --- a/compiler-rt/lib/msan/msan.h +++ b/compiler-rt/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/compiler-rt/lib/msan/msan_linux.cc b/compiler-rt/lib/msan/msan_linux.cc index f4b48b7abc6..7f6cb75ffaa 100644 --- a/compiler-rt/lib/msan/msan_linux.cc +++ b/compiler-rt/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/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc index eb3a3d56c24..30c07d994a0 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc @@ -832,6 +832,11 @@ void CovAfterFork(int child_pid) { coverage_data.AfterFork(child_pid); } +static void MaybeDumpCoverage() { + if (common_flags()->coverage) + __sanitizer_cov_dump(); +} + void InitializeCoverage(bool enabled, const char *dir) { if (coverage_enabled) return; // May happen if two sanitizer enable coverage in the same process. @@ -840,6 +845,7 @@ void InitializeCoverage(bool enabled, const char *dir) { coverage_data.Init(); if (enabled) coverage_data.Enable(); if (!common_flags()->coverage_direct) Atexit(__sanitizer_cov_dump); + AddDieCallback(MaybeDumpCoverage); } void ReInitializeCoverage(bool enabled, const char *dir) { -- cgit v1.2.3