Home | History | Annotate | Download | only in Linux
      1 // RUN: %clangxx_asan -std=c++11 -O0 %s -o %t && %run %t
      2 
      3 #include <assert.h>
      4 #include <unistd.h>
      5 #include <sys/mman.h>
      6 
      7 int main(void) {
      8   unsigned char vec[20];
      9   int res;
     10   size_t PS = sysconf(_SC_PAGESIZE);
     11   void *addr = mmap(nullptr, 20 * PS, PROT_READ | PROT_WRITE,
     12                     MAP_NORESERVE | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
     13 
     14   res = mincore(addr, 10 * PS, vec);
     15   assert(res == 0);
     16   for (int i = 0; i < 10; ++i)
     17     assert((vec[i] & 1) == 0);
     18 
     19   for (int i = 0; i < 5; ++i)
     20     ((char *)addr)[i * PS] = 1;
     21   res = mincore(addr, 10 * PS, vec);
     22   assert(res == 0);
     23   for (int i = 0; i < 10; ++i)
     24     assert((vec[i] & 1) == (i < 5));
     25 
     26   for (int i = 5; i < 10; ++i)
     27     ((char *)addr)[i * PS] = 1;
     28   res = mincore(addr, 10 * PS, vec);
     29   assert(res == 0);
     30   for (int i = 0; i < 10; ++i)
     31     assert((vec[i] & 1) == 1);
     32 
     33   return 0;
     34 }
     35