/* | |
#notarget: cris*-*-elf | |
*/ | |
#define _GNU_SOURCE | |
#include <string.h> | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <sys/types.h> | |
#include <sys/stat.h> | |
#include <fcntl.h> | |
#include <unistd.h> | |
#include <sys/mman.h> | |
int main (int argc, char *argv[]) | |
{ | |
int fd = open (argv[0], O_RDONLY); | |
struct stat sb; | |
int size; | |
void *a; | |
const char *str = "a string you'll only find in the program"; | |
if (fd == -1) | |
{ | |
perror ("open"); | |
abort (); | |
} | |
if (fstat (fd, &sb) < 0) | |
{ | |
perror ("fstat"); | |
abort (); | |
} | |
size = sb.st_size; | |
/* We want to test mmapping a size that isn't exactly a page. */ | |
if ((size & 8191) == 0) | |
size--; | |
a = mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); | |
if (memmem (a, size, str, strlen (str) + 1) == NULL) | |
abort (); | |
printf ("pass\n"); | |
exit (0); | |
} |