12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Test the mmap_limit_mb flag. 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_asan -O2 %s -o %t 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t 100 16 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t 100 1000000 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: env ASAN_OPTIONS=mmap_limit_mb=500 %run %t 50 16 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: env ASAN_OPTIONS=mmap_limit_mb=500 %run %t 50 1000000 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: env ASAN_OPTIONS=mmap_limit_mb=500 not %run %t 500 16 2>&1 | FileCheck %s 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: env ASAN_OPTIONS=mmap_limit_mb=500 not %run %t 500 1000000 2>&1 | FileCheck %s 105d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// XFAIL: arm-linux-gnueabi 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <assert.h> 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdlib.h> 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdio.h> 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <algorithm> 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <vector> 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main(int argc, char **argv) { 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(argc == 3); 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines long total_mb = atoi(argv[1]); 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines long allocation_size = atoi(argv[2]); 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fprintf(stderr, "total_mb: %zd allocation_size: %zd\n", total_mb, 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines allocation_size); 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines std::vector<char *> v; 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines for (long total = total_mb << 20; total > 0; total -= allocation_size) 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines v.push_back(new char[allocation_size]); 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines for (std::vector<char *>::const_iterator it = v.begin(); it != v.end(); ++it) 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines delete[](*it); 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fprintf(stderr, "PASS\n"); 312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // CHECK: total_mmaped{{.*}}mmap_limit_mb 322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 34