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