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