modernc.org/cc@v1.0.1/testdata/gcc-6.3.0/gcc/testsuite/gcc.c-torture/execute/loop-2g.c (about) 1 /* { dg-require-effective-target mmap } */ 2 /* { dg-skip-if "the executable is at the same position the test tries to remap" { m68k-*-linux* } { "*" } { "" } } */ 3 4 #include <limits.h> 5 6 #include <sys/types.h> 7 #include <sys/mman.h> 8 #include <sys/stat.h> 9 #include <fcntl.h> 10 #ifndef MAP_ANON 11 #ifdef MAP_ANONYMOUS 12 #define MAP_ANON MAP_ANONYMOUS 13 #else 14 #define MAP_ANON MAP_FILE 15 #endif 16 #endif 17 #ifndef MAP_FILE 18 #define MAP_FILE 0 19 #endif 20 #ifndef MAP_FIXED 21 #define MAP_FIXED 0 22 #endif 23 24 #define MAP_START (void *)0x7fff8000 25 #define MAP_LEN 0x10000 26 27 #define OFFSET (MAP_LEN/2 - 2 * sizeof (char)); 28 29 f (int s, char *p) 30 { 31 int i; 32 for (i = s; &p[i] < &p[40] && i >= 0; i++) 33 { 34 p[i] = -2; 35 } 36 } 37 38 main () 39 { 40 #ifdef MAP_ANON 41 char *p; 42 int dev_zero; 43 44 dev_zero = open ("/dev/zero", O_RDONLY); 45 /* -1 is OK when we have MAP_ANON; else mmap will flag an error. */ 46 if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int)) 47 exit (0); 48 p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE, 49 MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0); 50 if (p != (char *)-1) 51 { 52 p += OFFSET; 53 p[39] = 0; 54 f (0, p); 55 if (p[39] != (char)-2) 56 abort (); 57 p[39] = 0; 58 f (-1, p); 59 if (p[39] != 0) 60 abort (); 61 } 62 #endif 63 exit (0); 64 }