qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

check_mmap2.c (833B)


      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 }