summaryrefslogtreecommitdiff
path: root/lib/hwasan
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2019-01-25 02:05:25 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2019-01-25 02:05:25 +0000
commitad3e82bdb46b8db913fea4478b41e939320d19e2 (patch)
tree83ebddb28c47b6c9dc0f872d94bb39290b1b05c4 /lib/hwasan
parentdb8859a7bb9ccbf7709ad1c188f5c5916cfe9d96 (diff)
downloadcompiler-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.cc4
-rw-r--r--lib/hwasan/hwasan_report.cc16
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) {