root / tests / cris / check_mmap1.c @ 7aaabde7
History | View | Annotate | Download (834 Bytes)
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 |
} |