1 /* 2 #notarget: cris*-*-elf 3 */ 4 5 #define _GNU_SOURCE 6 #include <string.h> 7 #include <stdlib.h> 8 #include <stdio.h> 9 #include <sys/types.h> 10 #include <sys/stat.h> 11 #include <fcntl.h> 12 #include <unistd.h> 13 #include <sys/mman.h> 14 15 int main (int argc, char *argv[]) 16 { 17 int fd = open (argv[0], O_RDONLY); 18 struct stat sb; 19 int size; 20 void *a; 21 const char *str = "a string you'll only find in the program"; 22 23 if (fd == -1) 24 { 25 perror ("open"); 26 abort (); 27 } 28 29 if (fstat (fd, &sb) < 0) 30 { 31 perror ("fstat"); 32 abort (); 33 } 34 35 size = sb.st_size; 36 37 /* We want to test mmapping a size that isn't exactly a page. */ 38 if ((size & 8191) == 0) 39 size--; 40 41 a = mmap (NULL, size, PROT_READ, MAP_SHARED, fd, 0); 42 43 if (memmem (a, size, str, strlen (str) + 1) == NULL) 44 abort (); 45 46 printf ("pass\n"); 47 exit (0); 48 } 49