summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Shlyapnikov <alekseys@google.com>2018-06-28 21:38:34 +0000
committerAlex Shlyapnikov <alekseys@google.com>2018-06-28 21:38:34 +0000
commitfb1644835b6c416227e5861e1c43ebe909b3b195 (patch)
tree3bbdc0d56ab02957ddcf183d61f2b01cd44b4c0f
parent4d456455684caafc9eeea5743b170d794a9bd5f6 (diff)
downloadbcm5719-llvm-fb1644835b6c416227e5861e1c43ebe909b3b195.tar.gz
bcm5719-llvm-fb1644835b6c416227e5861e1c43ebe909b3b195.zip
[TSan] More detailed error message on failed sahdow memory madvise
Summary: Report errno value on failed shadow memory madvise attempt and add a hint message with the possible workaround. Reviewers: eugenis Subscribers: kubamracek, delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D48668 llvm-svn: 335928
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_platform_posix.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cc b/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cc
index 22b649ef303..d2345c79cfb 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cc
@@ -16,6 +16,7 @@
#if SANITIZER_POSIX
#include "sanitizer_common/sanitizer_common.h"
+#include "sanitizer_common/sanitizer_errno.h"
#include "sanitizer_common/sanitizer_libc.h"
#include "sanitizer_common/sanitizer_procmaps.h"
#include "tsan_platform.h"
@@ -24,13 +25,18 @@
namespace __tsan {
static const char kShadowMemoryMappingWarning[] =
- "FATAL: %s can not madvise shadow region [%zx, %zx] with %s\n";
+ "FATAL: %s can not madvise shadow region [%zx, %zx] with %s (errno: %d)\n";
+static const char kShadowMemoryMappingHint[] =
+ "HINT: if %s is not supported in your environment, you may set "
+ "TSAN_OPTIONS=%s=0\n";
static void NoHugePagesInShadow(uptr addr, uptr size) {
if (common_flags()->no_huge_pages_for_shadow)
if (!NoHugePagesInRegion(addr, size)) {
Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,
- "MADV_NOHUGEPAGE");
+ "MADV_NOHUGEPAGE", errno);
+ Printf(kShadowMemoryMappingHint, "MADV_NOHUGEPAGE",
+ "no_huge_pages_for_shadow");
Die();
}
}
@@ -39,7 +45,8 @@ static void DontDumpShadow(uptr addr, uptr size) {
if (common_flags()->use_madv_dontdump)
if (!DontDumpShadowMemory(addr, size)) {
Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,
- "MADV_DONTDUMP");
+ "MADV_DONTDUMP", errno);
+ Printf(kShadowMemoryMappingHint, "MADV_DONTDUMP", "use_madv_dontdump");
Die();
}
}
OpenPOWER on IntegriCloud