Skip to content

Commit

Permalink
[scudo] Relax the memalign test
Browse files Browse the repository at this point in the history
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

llvm-svn: 289665
  • Loading branch information
Kostya Kortchinsky committed Dec 14, 2016
1 parent ebfba70 commit a37860a
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions compiler-rt/test/scudo/memalign.cpp
Expand Up @@ -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);

Expand All @@ -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);
Expand Down

0 comments on commit a37860a

Please sign in to comment.