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 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}