xref: /openbsd-src/regress/sys/uvm/mmap_size/mmap_size.c (revision 4239b8225fa4f64aecb5a0fe486abd01f9e64ae2)
1*4239b822Smillert /*	$OpenBSD: mmap_size.c,v 1.3 2015/02/06 23:21:58 millert Exp $	*/
200fc33e2Sotto 
300fc33e2Sotto /*
400fc33e2Sotto  * Public domain. 2005, Otto Moerbeek <otto@drijf.net>
500fc33e2Sotto  */
600fc33e2Sotto 
700fc33e2Sotto #include <sys/types.h>
800fc33e2Sotto #include <sys/mman.h>
900fc33e2Sotto #include <err.h>
10*4239b822Smillert #include <stdint.h>
1100fc33e2Sotto #include <stdio.h>
12*4239b822Smillert #include <stdlib.h>
1300fc33e2Sotto 
1400fc33e2Sotto void
f(size_t sz)1500fc33e2Sotto f(size_t sz)
1600fc33e2Sotto {
1700fc33e2Sotto 	char *p;
1800fc33e2Sotto 	p = mmap(NULL, sz, PROT_READ|PROT_WRITE,
1900fc33e2Sotto 	    MAP_ANON|MAP_PRIVATE, -1, (off_t)0);
2000fc33e2Sotto 
2100fc33e2Sotto 	if (p == MAP_FAILED)
2200fc33e2Sotto 		return;
2300fc33e2Sotto 
2400fc33e2Sotto 	if (sz > 0) {
2500fc33e2Sotto 		p[0] = 0;
2600fc33e2Sotto 		p[sz / 2] = 0;
2700fc33e2Sotto 		p[sz - 1] = 0;
2800fc33e2Sotto 	}
2900fc33e2Sotto 	munmap(p, sz);
3000fc33e2Sotto }
3100fc33e2Sotto 
3200fc33e2Sotto int
main()3300fc33e2Sotto main()
3400fc33e2Sotto {
3500fc33e2Sotto 	size_t i;
3600fc33e2Sotto 
3700fc33e2Sotto 	for (i = 0; i < 0x2000; i += 0x100) {
3800fc33e2Sotto 		f(i);
3900fc33e2Sotto 		f(-i);
40*4239b822Smillert 		f(SIZE_MAX/2 - 0x1000);
4100fc33e2Sotto 	}
4200fc33e2Sotto 	return (0);
4300fc33e2Sotto }
44