xref: /openbmc/qemu/tests/tcg/multiarch/linux/test-vma.c (revision 6d1829fce4ea50d343f2df63eeff96685a359bf5)
1*33629b82SAlex Bennée /*
2*33629b82SAlex Bennée  * Test very large vma allocations.
3*33629b82SAlex Bennée  * The qemu out-of-memory condition was within the mmap syscall itself.
4*33629b82SAlex Bennée  * If the syscall actually returns with MAP_FAILED, the test succeeded.
5*33629b82SAlex Bennée  */
6*33629b82SAlex Bennée #include <sys/mman.h>
7*33629b82SAlex Bennée 
main()8*33629b82SAlex Bennée int main()
9*33629b82SAlex Bennée {
10*33629b82SAlex Bennée     int n = sizeof(size_t) == 4 ? 32 : 45;
11*33629b82SAlex Bennée 
12*33629b82SAlex Bennée     for (int i = 28; i < n; i++) {
13*33629b82SAlex Bennée         size_t l = (size_t)1 << i;
14*33629b82SAlex Bennée         void *p = mmap(0, l, PROT_NONE,
15*33629b82SAlex Bennée                        MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0);
16*33629b82SAlex Bennée         if (p == MAP_FAILED) {
17*33629b82SAlex Bennée             break;
18*33629b82SAlex Bennée         }
19*33629b82SAlex Bennée         munmap(p, l);
20*33629b82SAlex Bennée     }
21*33629b82SAlex Bennée     return 0;
22*33629b82SAlex Bennée }
23