xref: /openbmc/qemu/tests/tcg/multiarch/prot-none.c (revision 1c8e621f097362d0a28c65fa2f31054b47a5282b)
1*82607a73SIlya Leoshkevich /*
2*82607a73SIlya Leoshkevich  * Test that GDB can access PROT_NONE pages.
3*82607a73SIlya Leoshkevich  *
4*82607a73SIlya Leoshkevich  * SPDX-License-Identifier: GPL-2.0-or-later
5*82607a73SIlya Leoshkevich  */
6*82607a73SIlya Leoshkevich #include <assert.h>
7*82607a73SIlya Leoshkevich #include <stdlib.h>
8*82607a73SIlya Leoshkevich #include <string.h>
9*82607a73SIlya Leoshkevich #include <sys/mman.h>
10*82607a73SIlya Leoshkevich #include <unistd.h>
11*82607a73SIlya Leoshkevich 
break_here(void * q)12*82607a73SIlya Leoshkevich void break_here(void *q)
13*82607a73SIlya Leoshkevich {
14*82607a73SIlya Leoshkevich }
15*82607a73SIlya Leoshkevich 
main(void)16*82607a73SIlya Leoshkevich int main(void)
17*82607a73SIlya Leoshkevich {
18*82607a73SIlya Leoshkevich     long pagesize = sysconf(_SC_PAGESIZE);
19*82607a73SIlya Leoshkevich     void *p, *q;
20*82607a73SIlya Leoshkevich     int err;
21*82607a73SIlya Leoshkevich 
22*82607a73SIlya Leoshkevich     p = mmap(NULL, pagesize * 2, PROT_READ | PROT_WRITE,
23*82607a73SIlya Leoshkevich              MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
24*82607a73SIlya Leoshkevich     assert(p != MAP_FAILED);
25*82607a73SIlya Leoshkevich     q = p + pagesize - 1;
26*82607a73SIlya Leoshkevich     strcpy(q, "42");
27*82607a73SIlya Leoshkevich 
28*82607a73SIlya Leoshkevich     err = mprotect(p, pagesize * 2, PROT_NONE);
29*82607a73SIlya Leoshkevich     assert(err == 0);
30*82607a73SIlya Leoshkevich 
31*82607a73SIlya Leoshkevich     break_here(q);
32*82607a73SIlya Leoshkevich 
33*82607a73SIlya Leoshkevich     err = mprotect(p, pagesize * 2, PROT_READ);
34*82607a73SIlya Leoshkevich     assert(err == 0);
35*82607a73SIlya Leoshkevich     if (getenv("PROT_NONE_PY")) {
36*82607a73SIlya Leoshkevich         assert(strcmp(q, "24") == 0);
37*82607a73SIlya Leoshkevich     }
38*82607a73SIlya Leoshkevich 
39*82607a73SIlya Leoshkevich     return EXIT_SUCCESS;
40*82607a73SIlya Leoshkevich }
41