qemu/tests/tcg/cris/libc/check_mmap2.c
<<
>>
Prefs
   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
  15int 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}
  49