From 906e727972d1f4873d006630d6aa6795a7025a1c Mon Sep 17 00:00:00 2001 From: David Carlier Date: Tue, 6 Aug 2019 21:30:03 +0000 Subject: [PATCH] [Sanitizer] Linux explicitally migrate shadow mapping to Transparent Huge Page in madvise mode, the shadow pages will be migrated only via madvise explicit calls. Reviewers: vitalybuka Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D65775 llvm-svn: 368090 --- compiler-rt/lib/sanitizer_common/sanitizer_common.h | 2 +- compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp | 9 ++++----- compiler-rt/lib/sanitizer_common/sanitizer_win.cpp | 3 +-- compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp | 8 +------- 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h index 224e23a..4f0f16d 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h @@ -131,7 +131,7 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end); void IncreaseTotalMmap(uptr size); void DecreaseTotalMmap(uptr size); uptr GetRSS(); -bool SetShadowRegionHugePageMode(uptr addr, uptr length); +void SetShadowRegionHugePageMode(uptr addr, uptr length); bool DontDumpShadowMemory(uptr addr, uptr length); // Check if the built VMA size matches the runtime one. void CheckVMASize(); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp index ad8a1ec..24c42f3 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp @@ -68,13 +68,12 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end) { SANITIZER_MADVISE_DONTNEED); } -bool SetShadowRegionHugePageMode(uptr addr, uptr size) { +void SetShadowRegionHugePageMode(uptr addr, uptr size) { #ifdef MADV_NOHUGEPAGE // May not be defined on old systems. if (common_flags()->no_huge_pages_for_shadow) - return madvise((char *)addr, size, MADV_NOHUGEPAGE) == 0; - return true; -#else - return true; + madvise((char *)addr, size, MADV_NOHUGEPAGE); + else + madvise((char *)addr, size, MADV_HUGEPAGE) == 0; #endif // MADV_NOHUGEPAGE } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp index 14c8d5d..c98e3d4 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp @@ -329,9 +329,8 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end) { // FIXME: add madvise-analog when we move to 64-bits. } -bool SetShadowRegionHugePageMode(uptr addr, uptr size) { +void SetShadowRegionHugePageMode(uptr addr, uptr size) { // FIXME: probably similar to ReleaseMemoryToOS. - return true; } bool DontDumpShadowMemory(uptr addr, uptr length) { diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp b/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp index 1f9afd1..1a0faee 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp +++ b/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp @@ -30,13 +30,7 @@ static const char kShadowMemoryMappingHint[] = "TSAN_OPTIONS=%s=0\n"; static void NoHugePagesInShadow(uptr addr, uptr size) { - if (!SetShadowRegionHugePageMode(addr, size)) { - Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size, - "MADV_NOHUGEPAGE", errno); - Printf(kShadowMemoryMappingHint, "MADV_NOHUGEPAGE", - "no_huge_pages_for_shadow"); - Die(); - } + SetShadowRegionHugePageMode(addr, size); } static void DontDumpShadow(uptr addr, uptr size) { -- 2.7.4