forked from OSchip/llvm-project
[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
This commit is contained in:
parent
4d45645568
commit
fb1644835b
|
@ -16,6 +16,7 @@
|
||||||
#if SANITIZER_POSIX
|
#if SANITIZER_POSIX
|
||||||
|
|
||||||
#include "sanitizer_common/sanitizer_common.h"
|
#include "sanitizer_common/sanitizer_common.h"
|
||||||
|
#include "sanitizer_common/sanitizer_errno.h"
|
||||||
#include "sanitizer_common/sanitizer_libc.h"
|
#include "sanitizer_common/sanitizer_libc.h"
|
||||||
#include "sanitizer_common/sanitizer_procmaps.h"
|
#include "sanitizer_common/sanitizer_procmaps.h"
|
||||||
#include "tsan_platform.h"
|
#include "tsan_platform.h"
|
||||||
|
@ -24,13 +25,18 @@
|
||||||
namespace __tsan {
|
namespace __tsan {
|
||||||
|
|
||||||
static const char kShadowMemoryMappingWarning[] =
|
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) {
|
static void NoHugePagesInShadow(uptr addr, uptr size) {
|
||||||
if (common_flags()->no_huge_pages_for_shadow)
|
if (common_flags()->no_huge_pages_for_shadow)
|
||||||
if (!NoHugePagesInRegion(addr, size)) {
|
if (!NoHugePagesInRegion(addr, size)) {
|
||||||
Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,
|
Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,
|
||||||
"MADV_NOHUGEPAGE");
|
"MADV_NOHUGEPAGE", errno);
|
||||||
|
Printf(kShadowMemoryMappingHint, "MADV_NOHUGEPAGE",
|
||||||
|
"no_huge_pages_for_shadow");
|
||||||
Die();
|
Die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +45,8 @@ static void DontDumpShadow(uptr addr, uptr size) {
|
||||||
if (common_flags()->use_madv_dontdump)
|
if (common_flags()->use_madv_dontdump)
|
||||||
if (!DontDumpShadowMemory(addr, size)) {
|
if (!DontDumpShadowMemory(addr, size)) {
|
||||||
Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,
|
Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,
|
||||||
"MADV_DONTDUMP");
|
"MADV_DONTDUMP", errno);
|
||||||
|
Printf(kShadowMemoryMappingHint, "MADV_DONTDUMP", "use_madv_dontdump");
|
||||||
Die();
|
Die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue