|  | /* | 
|  | #notarget: cris*-*-elf | 
|  | */ | 
|  |  | 
|  | #define _GNU_SOURCE | 
|  | #include <string.h> | 
|  | #include <stdlib.h> | 
|  | #include <stdio.h> | 
|  | #include <sys/types.h> | 
|  | #include <sys/stat.h> | 
|  | #include <fcntl.h> | 
|  | #include <unistd.h> | 
|  | #include <sys/mman.h> | 
|  |  | 
|  | int main (int argc, char *argv[]) | 
|  | { | 
|  | int fd = open (argv[0], O_RDONLY); | 
|  | struct stat sb; | 
|  | int size; | 
|  | void *a; | 
|  | const char *str = "a string you'll only find in the program"; | 
|  |  | 
|  | if (fd == -1) | 
|  | { | 
|  | perror ("open"); | 
|  | abort (); | 
|  | } | 
|  |  | 
|  | if (fstat (fd, &sb) < 0) | 
|  | { | 
|  | perror ("fstat"); | 
|  | abort (); | 
|  | } | 
|  |  | 
|  | size = sb.st_size; | 
|  |  | 
|  | /* We want to test mmapping a size that isn't exactly a page.  */ | 
|  | if ((size & 8191) == 0) | 
|  | size--; | 
|  |  | 
|  | a = mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); | 
|  |  | 
|  | if (memmem (a, size, str, strlen (str) + 1) == NULL) | 
|  | abort (); | 
|  |  | 
|  | printf ("pass\n"); | 
|  | exit (0); | 
|  | } |