1cbdddcfb32883a37e873907602d34bac523e3eadsewardj#include <stdio.h> 2cbdddcfb32883a37e873907602d34bac523e3eadsewardj#include <stdlib.h> 383b62cbbab29bde83eba40231f307c2a311e73c8njn#include "tests/sys_mman.h" 4cbdddcfb32883a37e873907602d34bac523e3eadsewardj 5cbdddcfb32883a37e873907602d34bac523e3eadsewardjint main(int argc, char **argv) 6cbdddcfb32883a37e873907602d34bac523e3eadsewardj{ 79105a3eb241b6a8db986712859b8191e9e6696b8njn void *p1; 89105a3eb241b6a8db986712859b8191e9e6696b8njn void *p2; 9cbdddcfb32883a37e873907602d34bac523e3eadsewardj 109105a3eb241b6a8db986712859b8191e9e6696b8njn if ( ( p1 = mmap( 0, 4096, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 ) ) == MAP_FAILED ) 119105a3eb241b6a8db986712859b8191e9e6696b8njn { 129105a3eb241b6a8db986712859b8191e9e6696b8njn perror( "aligned mmap failed" ); 13cbdddcfb32883a37e873907602d34bac523e3eadsewardj exit( 1 ); 149105a3eb241b6a8db986712859b8191e9e6696b8njn } 15cbdddcfb32883a37e873907602d34bac523e3eadsewardj 169105a3eb241b6a8db986712859b8191e9e6696b8njn if ( munmap( p1, 4096 ) != 0 ) 179105a3eb241b6a8db986712859b8191e9e6696b8njn { 189105a3eb241b6a8db986712859b8191e9e6696b8njn perror( "aligned munmap failed" ); 19cbdddcfb32883a37e873907602d34bac523e3eadsewardj exit( 1 ); 209105a3eb241b6a8db986712859b8191e9e6696b8njn } 219105a3eb241b6a8db986712859b8191e9e6696b8njn 229105a3eb241b6a8db986712859b8191e9e6696b8njn // This fails because MAP_FIXED is specified and p1+1 isn't page-aligned. 239105a3eb241b6a8db986712859b8191e9e6696b8njn // (On Linux, just non-page-alignment is enough for failure, but on Darwin 249105a3eb241b6a8db986712859b8191e9e6696b8njn // MAP_FIXED has to also be specified.) 259105a3eb241b6a8db986712859b8191e9e6696b8njn if ( ( p2 = mmap( p1 + 1, 4096, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0 ) ) == MAP_FAILED ) 269105a3eb241b6a8db986712859b8191e9e6696b8njn { 279105a3eb241b6a8db986712859b8191e9e6696b8njn perror( "unaligned mmap failed" ); 28cbdddcfb32883a37e873907602d34bac523e3eadsewardj exit( 1 ); 299105a3eb241b6a8db986712859b8191e9e6696b8njn } 30cbdddcfb32883a37e873907602d34bac523e3eadsewardj 319105a3eb241b6a8db986712859b8191e9e6696b8njn if ( munmap( p2, 4096 ) != 0 ) 329105a3eb241b6a8db986712859b8191e9e6696b8njn { 339105a3eb241b6a8db986712859b8191e9e6696b8njn perror( "unaligned munmap failed" ); 34cbdddcfb32883a37e873907602d34bac523e3eadsewardj exit( 1 ); 359105a3eb241b6a8db986712859b8191e9e6696b8njn } 36cbdddcfb32883a37e873907602d34bac523e3eadsewardj 379105a3eb241b6a8db986712859b8191e9e6696b8njn exit( 0 ); 38cbdddcfb32883a37e873907602d34bac523e3eadsewardj} 39