[compiler-rt] r289665 - [scudo] Relax the memalign test

Kostya Kortchinsky via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 14 08:38:11 PST 2016


Author: cryptoad
Date: Wed Dec 14 10:38:11 2016
New Revision: 289665

URL: http://llvm.org/viewvc/llvm-project?rev=289665&view=rev
Log:
[scudo] Relax the memalign test

Summary:
Now that we are not rounding up the sizes passed to the secondary allocator,
the memalign test could run out of aligned addresses to return for larger
alignments. We now reduce the size of the quarantine for that test, and
allocate less chunks for the larger alignments.

Subscribers: llvm-commits

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

Modified:
    compiler-rt/trunk/test/scudo/memalign.cpp

Modified: compiler-rt/trunk/test/scudo/memalign.cpp
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/scudo/memalign.cpp?rev=289665&r1=289664&r2=289665&view=diff
==============================================================================
--- compiler-rt/trunk/test/scudo/memalign.cpp (original)
+++ compiler-rt/trunk/test/scudo/memalign.cpp Wed Dec 14 10:38:11 2016
@@ -10,6 +10,12 @@
 #include <stdlib.h>
 #include <string.h>
 
+// Reduce the size of the quarantine, or the test can run out of aligned memory
+// on 32-bit for the larger alignments.
+extern "C" const char *__scudo_default_options() {
+  return "QuarantineSizeMb=1";
+}
+
 // Sometimes the headers may not have this...
 extern "C" void *aligned_alloc (size_t alignment, size_t size);
 
@@ -31,18 +37,28 @@ int main(int argc, char **argv)
       return 1;
     free(p);
     // Tests various combinations of alignment and sizes
-    for (int i = (sizeof(void *) == 4) ? 3 : 4; i <= 24; i++) {
+    for (int i = (sizeof(void *) == 4) ? 3 : 4; i < 19; i++) {
       alignment = 1U << i;
       for (int j = 1; j < 33; j++) {
         size = 0x800 * j;
         for (int k = 0; k < 3; k++) {
-          p = memalign(alignment, size - (16 * k));
+          p = memalign(alignment, size - (2 * sizeof(void *) * k));
           if (!p)
             return 1;
           free(p);
         }
       }
     }
+    // For larger alignment, reduce the number of allocations to avoid running
+    // out of potential addresses (on 32-bit).
+    for (int i = 19; i <= 24; i++) {
+      for (int k = 0; k < 3; k++) {
+        p = memalign(alignment, 0x1000 - (2 * sizeof(void *) * k));
+        if (!p)
+          return 1;
+        free(p);
+      }
+    }
   }
   if (!strcmp(argv[1], "invalid")) {
     p = memalign(alignment - 1, size);




More information about the llvm-commits mailing list