xref: /openbmc/qemu/tests/tcg/aarch64/lse2-fault.c (revision 70b73990d5e2e8e1ce63274b6b85888bef2957aa)
1*6a2c23ddSRichard Henderson #include <sys/mman.h>
2*6a2c23ddSRichard Henderson #include <sys/shm.h>
3*6a2c23ddSRichard Henderson #include <unistd.h>
4*6a2c23ddSRichard Henderson #include <stdio.h>
5*6a2c23ddSRichard Henderson 
main()6*6a2c23ddSRichard Henderson int main()
7*6a2c23ddSRichard Henderson {
8*6a2c23ddSRichard Henderson     int psize = getpagesize();
9*6a2c23ddSRichard Henderson     int id;
10*6a2c23ddSRichard Henderson     void *p;
11*6a2c23ddSRichard Henderson 
12*6a2c23ddSRichard Henderson     /*
13*6a2c23ddSRichard Henderson      * We need a shared mapping to enter CF_PARALLEL mode.
14*6a2c23ddSRichard Henderson      * The easiest way to get that is shmat.
15*6a2c23ddSRichard Henderson      */
16*6a2c23ddSRichard Henderson     id = shmget(IPC_PRIVATE, 2 * psize, IPC_CREAT | 0600);
17*6a2c23ddSRichard Henderson     if (id < 0) {
18*6a2c23ddSRichard Henderson         perror("shmget");
19*6a2c23ddSRichard Henderson         return 2;
20*6a2c23ddSRichard Henderson     }
21*6a2c23ddSRichard Henderson     p = shmat(id, NULL, 0);
22*6a2c23ddSRichard Henderson     if (p == MAP_FAILED) {
23*6a2c23ddSRichard Henderson         perror("shmat");
24*6a2c23ddSRichard Henderson         return 2;
25*6a2c23ddSRichard Henderson     }
26*6a2c23ddSRichard Henderson 
27*6a2c23ddSRichard Henderson     /* Protect the second page. */
28*6a2c23ddSRichard Henderson     if (mprotect(p + psize, psize, PROT_NONE) < 0) {
29*6a2c23ddSRichard Henderson         perror("mprotect");
30*6a2c23ddSRichard Henderson         return 2;
31*6a2c23ddSRichard Henderson     }
32*6a2c23ddSRichard Henderson 
33*6a2c23ddSRichard Henderson     /*
34*6a2c23ddSRichard Henderson      * Load 4 bytes, 6 bytes from the end of the page.
35*6a2c23ddSRichard Henderson      * On success this will load 0 from the newly allocated shm.
36*6a2c23ddSRichard Henderson      */
37*6a2c23ddSRichard Henderson     return *(int *)(p + psize - 6);
38*6a2c23ddSRichard Henderson }
39