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 12*82607a73SIlya Leoshkevich void break_here(void *q) 13*82607a73SIlya Leoshkevich { 14*82607a73SIlya Leoshkevich } 15*82607a73SIlya Leoshkevich 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