1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| // RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
| #include <stdint.h>
| #include <stdio.h>
| #include <errno.h>
| #include <sys/mman.h>
|
| #if defined(__FreeBSD__)
| // The MAP_NORESERVE define has been removed in FreeBSD 11.x, and even before
| // that, it was never implemented. So just define it to zero.
| #undef MAP_NORESERVE
| #define MAP_NORESERVE 0
| #endif
|
| int main() {
| #ifdef __x86_64__
| const size_t kLog2Size = 39;
| #elif defined(__mips64) || defined(__aarch64__)
| const size_t kLog2Size = 32;
| #elif defined(__powerpc64__)
| const size_t kLog2Size = 39;
| #endif
| const uintptr_t kLocation = 0x40ULL << kLog2Size;
| void *p = mmap(
| reinterpret_cast<void*>(kLocation),
| 1ULL << kLog2Size,
| PROT_READ|PROT_WRITE,
| MAP_PRIVATE|MAP_ANON|MAP_NORESERVE,
| -1, 0);
| fprintf(stderr, "DONE %p %d\n", p, errno);
| return p == MAP_FAILED;
| }
|
| // CHECK: DONE
|
|