1#include <stdio.h>
2#include <stdlib.h>
3#include "tests/sys_mman.h"
4
5int main(int argc, char **argv)
6{
7   void *p1;
8   void *p2;
9
10   if ( ( p1 = mmap( 0, 4096, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 ) ) == MAP_FAILED )
11   {
12      perror( "aligned mmap failed" );
13      exit( 1 );
14   }
15
16   if ( munmap( p1, 4096 ) != 0 )
17   {
18      perror( "aligned munmap failed" );
19      exit( 1 );
20   }
21
22   // This fails because MAP_FIXED is specified and p1+1 isn't page-aligned.
23   // (On Linux, just non-page-alignment is enough for failure, but on Darwin
24   // MAP_FIXED has to also be specified.)
25   if ( ( p2 = mmap( p1 + 1, 4096, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0 ) ) == MAP_FAILED )
26   {
27      perror( "unaligned mmap failed" );
28      exit( 1 );
29   }
30
31   if ( munmap( p2, 4096 ) != 0 )
32   {
33      perror( "unaligned munmap failed" );
34      exit( 1 );
35   }
36
37   exit( 0 );
38}
39