summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Kortchinsky <kostyak@google.com>2016-12-14 16:38:11 +0000
committerKostya Kortchinsky <kostyak@google.com>2016-12-14 16:38:11 +0000
commita37860acee2d02520e32d20dffd80fe43859b419 (patch)
treec08e649e7095fda34857ec971c18ee36882f030b
parentebfba7027ea89fbd4e2672d375f65451a7e54cde (diff)
downloadbcm5719-llvm-a37860acee2d02520e32d20dffd80fe43859b419.tar.gz
bcm5719-llvm-a37860acee2d02520e32d20dffd80fe43859b419.zip
[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 llvm-svn: 289665
-rw-r--r--compiler-rt/test/scudo/memalign.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/compiler-rt/test/scudo/memalign.cpp b/compiler-rt/test/scudo/memalign.cpp
index 6f4c50e6940..b407ec57434 100644
--- a/compiler-rt/test/scudo/memalign.cpp
+++ b/compiler-rt/test/scudo/memalign.cpp
@@ -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);
OpenPOWER on IntegriCloud