xref: /qemu/tests/tcg/cris/libc/check_mmap1.c (revision abff1abf)
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_PRIVATE, 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