[compiler-rt] r264068 - [tsan] Disable randomized address space on linux aarch64.

Yabin Cui via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 22 10:16:26 PDT 2016


Author: yabinc
Date: Tue Mar 22 12:16:26 2016
New Revision: 264068

URL: http://llvm.org/viewvc/llvm-project?rev=264068&view=rev
Log:
[tsan] Disable randomized address space on linux aarch64.

Summary:
After patch https://lkml.org/lkml/2015/12/21/340 is introduced in
linux kernel, the random gap between stack and heap is increased
from 128M to 36G on 39-bit aarch64. And it is almost impossible
to cover this big range. So I think we need to disable randomized
virtual space on aarch64 linux.

Reviewers: kcc, llvm-commits, eugenis, zatrazz, dvyukov, rengolin

Subscribers: rengolin, aemerson, tberghammer, danalbert, srhines, enh

Differential Revision: http://reviews.llvm.org/D18003

Modified:
    compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc?rev=264068&r1=264067&r2=264068&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc Tue Mar 22 12:16:26 2016
@@ -36,6 +36,7 @@
 #include <string.h>
 #include <stdarg.h>
 #include <sys/mman.h>
+#include <sys/personality.h>
 #include <sys/syscall.h>
 #include <sys/socket.h>
 #include <sys/time.h>
@@ -291,6 +292,20 @@ void InitializePlatform() {
       SetAddressSpaceUnlimited();
       reexec = true;
     }
+    // After patch "arm64: mm: support ARCH_MMAP_RND_BITS." is introduced in
+    // linux kernel, the random gap between stack and mapped area is increased
+    // from 128M to 36G on 39-bit aarch64. As it is almost impossible to cover
+    // this big range, we should disable randomized virtual space on aarch64.
+#if defined(__aarch64__)
+    int old_personality = personality(0xffffffff);
+    if (old_personality != -1 && (old_personality & ADDR_NO_RANDOMIZE) == 0) {
+      Report("WARNING: Program is run with randomized virtual address space,"
+             " which wouldn't work with ThreadSanitizer.\n");
+      Report("Re-execing with fixed virtual address space.\n");
+      CHECK(personality(old_personality | ADDR_NO_RANDOMIZE) != -1);
+      reexec = true;
+    }
+#endif
     if (reexec)
       ReExec();
   }




More information about the llvm-commits mailing list