xref: /qemu/tests/tcg/cris/libc/check_mmap2.c (revision d4f6e58f)
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