From ad3e82bdb46b8db913fea4478b41e939320d19e2 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Fri, 25 Jan 2019 02:05:25 +0000 Subject: [hwasan] Implement print_module_map flag. Reviewers: kcc, pcc Subscribers: kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D57130 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@352150 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/hwasan/hwasan_linux.cc | 4 ++-- lib/hwasan/hwasan_report.cc | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'lib/hwasan') diff --git a/lib/hwasan/hwasan_linux.cc b/lib/hwasan/hwasan_linux.cc index f4ef22fcf..2a0aebbbe 100644 --- a/lib/hwasan/hwasan_linux.cc +++ b/lib/hwasan/hwasan_linux.cc @@ -218,6 +218,8 @@ bool MemIsApp(uptr p) { } static void HwasanAtExit(void) { + if (common_flags()->print_module_map) + DumpProcessMap(); if (flags()->print_stats && (flags()->atexit || hwasan_report_count > 0)) ReportStats(); if (hwasan_report_count > 0) { @@ -376,8 +378,6 @@ static void HandleTagMismatch(AccessInfo ai, uptr pc, uptr frame, GetStackTrace(stack, kStackTraceMax, pc, frame, uc, common_flags()->fast_unwind_on_fatal); - ++hwasan_report_count; - bool fatal = flags()->halt_on_error || !ai.recover; ReportTagMismatch(stack, ai.addr, ai.size, ai.is_store, fatal); } diff --git a/lib/hwasan/hwasan_report.cc b/lib/hwasan/hwasan_report.cc index 495e4555f..aad5e4095 100644 --- a/lib/hwasan/hwasan_report.cc +++ b/lib/hwasan/hwasan_report.cc @@ -34,15 +34,21 @@ class ScopedReport { ScopedReport(bool fatal = false) : error_message_(1), fatal(fatal) { BlockingMutexLock lock(&error_message_lock_); error_message_ptr_ = fatal ? &error_message_ : nullptr; + ++hwasan_report_count; } ~ScopedReport() { - BlockingMutexLock lock(&error_message_lock_); - if (fatal) { - SetAbortMessage(error_message_.data()); - Die(); + { + BlockingMutexLock lock(&error_message_lock_); + if (fatal) + SetAbortMessage(error_message_.data()); + error_message_ptr_ = nullptr; } - error_message_ptr_ = nullptr; + if (common_flags()->print_module_map >= 2 || + (fatal && common_flags()->print_module_map)) + DumpProcessMap(); + if (fatal) + Die(); } static void MaybeAppendToErrorMessage(const char *msg) { -- cgit v1.2.1