[Sanitizer] Linux refactor shadow huge page mode handling
authorDavid Carlier <devnexen@gmail.com>
Mon, 5 Aug 2019 20:54:36 +0000 (20:54 +0000)
committerDavid Carlier <devnexen@gmail.com>
Mon, 5 Aug 2019 20:54:36 +0000 (20:54 +0000)
Disabling Transparent huge page mode refactored in one function.

Reviewers: vitalybuka

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D65771

llvm-svn: 367925

compiler-rt/lib/asan/asan_shadow_setup.cpp
compiler-rt/lib/hwasan/hwasan_linux.cpp
compiler-rt/lib/sanitizer_common/sanitizer_common.h
compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp
compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp

index 68b0ba183dcc72c49696402874da49ebc1e2f52c..fc9bf51e1b585b94c2f62ebecf06ea38346896ab 100644 (file)
@@ -37,7 +37,7 @@ void ReserveShadowMemoryRange(uptr beg, uptr end, const char *name) {
         size);
     Abort();
   }
-  if (common_flags()->no_huge_pages_for_shadow) NoHugePagesInRegion(beg, size);
+  SetShadowRegionHugePageMode(beg, size);
   if (common_flags()->use_madv_dontdump) DontDumpShadowMemory(beg, size);
 }
 
index d932976489e91927d96f7499e8a28abc02f0fee8..051ec2fb9cc3aa333f4079dde6e5052173f84723 100644 (file)
@@ -211,8 +211,7 @@ void InitThreads() {
 
 static void MadviseShadowRegion(uptr beg, uptr end) {
   uptr size = end - beg + 1;
-  if (common_flags()->no_huge_pages_for_shadow)
-    NoHugePagesInRegion(beg, size);
+  SetShadowRegionHugePageMode(beg, size);
   if (common_flags()->use_madv_dontdump)
     DontDumpShadowMemory(beg, size);
 }
index f81341c4709496a9b9f8cfd2f1d04d20c7c1213f..224e23a6be32a26e2ef6075da685bd5f2a136efc 100644 (file)
@@ -131,7 +131,7 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end);
 void IncreaseTotalMmap(uptr size);
 void DecreaseTotalMmap(uptr size);
 uptr GetRSS();
-bool NoHugePagesInRegion(uptr addr, uptr length);
+bool SetShadowRegionHugePageMode(uptr addr, uptr length);
 bool DontDumpShadowMemory(uptr addr, uptr length);
 // Check if the built VMA size matches the runtime one.
 void CheckVMASize();
index 7aad0b14127603d683297cfeddc03de00cba37c4..ad8a1ec99301d92bac27c421aac324258eb8de1d 100644 (file)
@@ -68,9 +68,11 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end) {
             SANITIZER_MADVISE_DONTNEED);
 }
 
-bool NoHugePagesInRegion(uptr addr, uptr size) {
+bool SetShadowRegionHugePageMode(uptr addr, uptr size) {
 #ifdef MADV_NOHUGEPAGE  // May not be defined on old systems.
-  return madvise((char *)addr, size, MADV_NOHUGEPAGE) == 0;
+  if (common_flags()->no_huge_pages_for_shadow)
+    return madvise((char *)addr, size, MADV_NOHUGEPAGE) == 0;
+  return true;
 #else
   return true;
 #endif  // MADV_NOHUGEPAGE
index c32fbbeadf5f8fc5a5b338e47706962cce5509c5..14c8d5dbe8ec779388b4318412ee5e9958203326 100644 (file)
@@ -329,7 +329,7 @@ void ReleaseMemoryPagesToOS(uptr beg, uptr end) {
   // FIXME: add madvise-analog when we move to 64-bits.
 }
 
-bool NoHugePagesInRegion(uptr addr, uptr size) {
+bool SetShadowRegionHugePageMode(uptr addr, uptr size) {
   // FIXME: probably similar to ReleaseMemoryToOS.
   return true;
 }
index 3c9e45561d3768853bced02659649f5db4685b8e..1f9afd1767ca9f511615988655af62a443cc9296 100644 (file)
@@ -30,14 +30,13 @@ static const char kShadowMemoryMappingHint[] =
     "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", errno);
-      Printf(kShadowMemoryMappingHint, "MADV_NOHUGEPAGE",
-             "no_huge_pages_for_shadow");
-      Die();
-    }
+  if (!SetShadowRegionHugePageMode(addr, size)) {
+    Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,
+        "MADV_NOHUGEPAGE", errno);
+    Printf(kShadowMemoryMappingHint, "MADV_NOHUGEPAGE",
+        "no_huge_pages_for_shadow");
+    Die();
+  }
 }
 
 static void DontDumpShadow(uptr addr, uptr size) {