diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2019-01-25 02:05:25 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2019-01-25 02:05:25 +0000 |
commit | ad3e82bdb46b8db913fea4478b41e939320d19e2 (patch) | |
tree | 83ebddb28c47b6c9dc0f872d94bb39290b1b05c4 /lib/hwasan | |
parent | db8859a7bb9ccbf7709ad1c188f5c5916cfe9d96 (diff) | |
download | compiler-rt-ad3e82bdb46b8db913fea4478b41e939320d19e2.tar.gz |
[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
Diffstat (limited to 'lib/hwasan')
-rw-r--r-- | lib/hwasan/hwasan_linux.cc | 4 | ||||
-rw-r--r-- | lib/hwasan/hwasan_report.cc | 16 |
2 files changed, 13 insertions, 7 deletions
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) { |