d: Merge upstream dmd, druntime 4c18eed967, phobos d945686a4.
[official-gcc.git] / libphobos / libdruntime / core / sys / posix / sys / mman.d
blobb1eb9fa81073c1d00a9b9a01c0b4f8c34ea77519
1 /**
2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly, Alex Rønne Petersen
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8 */
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
15 module core.sys.posix.sys.mman;
17 import core.sys.posix.config;
18 public import core.sys.posix.sys.types; // for off_t, mode_t
20 version (OSX)
21 version = Darwin;
22 else version (iOS)
23 version = Darwin;
24 else version (TVOS)
25 version = Darwin;
26 else version (WatchOS)
27 version = Darwin;
29 version (ARM) version = ARM_Any;
30 version (AArch64) version = ARM_Any;
31 version (HPPA) version = HPPA_Any;
32 version (HPPA64) version = HPPA_Any;
33 version (MIPS32) version = MIPS_Any;
34 version (MIPS64) version = MIPS_Any;
35 version (PPC) version = PPC_Any;
36 version (PPC64) version = PPC_Any;
37 version (RISCV32) version = RISCV_Any;
38 version (RISCV64) version = RISCV_Any;
39 version (S390) version = IBMZ_Any;
40 version (SPARC) version = SPARC_Any;
41 version (SPARC64) version = SPARC_Any;
42 version (SystemZ) version = IBMZ_Any;
43 version (X86) version = X86_Any;
44 version (X86_64) version = X86_Any;
46 version (Posix):
47 extern (C) nothrow @nogc:
50 // Advisory Information (ADV)
53 int posix_madvise(void*, size_t, int);
56 version (CRuntime_Glibc)
58 static if (_XOPEN_SOURCE >= 600)
60 int posix_madvise(void *__addr, size_t __len, int __advice);
63 else version (Darwin)
65 int posix_madvise(void *addr, size_t len, int advice);
67 else version (FreeBSD)
69 int posix_madvise(void *addr, size_t len, int advice);
71 else version (NetBSD)
73 int posix_madvise(void *addr, size_t len, int advice);
75 else version (OpenBSD)
77 int posix_madvise(void *addr, size_t len, int advice);
79 else version (DragonFlyBSD)
81 int posix_madvise(void *addr, size_t len, int advice);
83 else version (Solaris)
86 else version (CRuntime_Bionic)
89 else version (CRuntime_Musl)
91 int posix_madvise(void *, size_t, int);
93 else version (CRuntime_UClibc)
95 int posix_madvise(void *__addr, size_t __len, int __advice);
97 else
99 static assert(false, "Unsupported platform");
104 // Advisory Information and either Memory Mapped Files or Shared Memory Objects (MC1)
107 POSIX_MADV_NORMAL
108 POSIX_MADV_SEQUENTIAL
109 POSIX_MADV_RANDOM
110 POSIX_MADV_WILLNEED
111 POSIX_MADV_DONTNEED
114 version (linux)
116 version (Alpha)
117 private enum __POSIX_MADV_DONTNEED = 6;
118 else
119 private enum __POSIX_MADV_DONTNEED = 4;
121 enum
123 POSIX_MADV_NORMAL = 0,
124 POSIX_MADV_RANDOM = 1,
125 POSIX_MADV_SEQUENTIAL = 2,
126 POSIX_MADV_WILLNEED = 3,
127 POSIX_MADV_DONTNEED = __POSIX_MADV_DONTNEED,
130 else version (Darwin)
132 enum POSIX_MADV_NORMAL = 0;
133 enum POSIX_MADV_RANDOM = 1;
134 enum POSIX_MADV_SEQUENTIAL = 2;
135 enum POSIX_MADV_WILLNEED = 3;
136 enum POSIX_MADV_DONTNEED = 4;
138 else version (FreeBSD)
140 enum POSIX_MADV_NORMAL = 0;
141 enum POSIX_MADV_RANDOM = 1;
142 enum POSIX_MADV_SEQUENTIAL = 2;
143 enum POSIX_MADV_WILLNEED = 3;
144 enum POSIX_MADV_DONTNEED = 4;
146 else version (NetBSD)
148 enum POSIX_MADV_NORMAL = 0;
149 enum POSIX_MADV_RANDOM = 1;
150 enum POSIX_MADV_SEQUENTIAL = 2;
151 enum POSIX_MADV_WILLNEED = 3;
152 enum POSIX_MADV_DONTNEED = 4;
154 else version (OpenBSD)
156 enum POSIX_MADV_NORMAL = 0;
157 enum POSIX_MADV_RANDOM = 1;
158 enum POSIX_MADV_SEQUENTIAL = 2;
159 enum POSIX_MADV_WILLNEED = 3;
160 enum POSIX_MADV_DONTNEED = 4;
162 else version (DragonFlyBSD)
164 enum POSIX_MADV_NORMAL = 0;
165 enum POSIX_MADV_RANDOM = 1;
166 enum POSIX_MADV_SEQUENTIAL = 2;
167 enum POSIX_MADV_WILLNEED = 3;
168 enum POSIX_MADV_DONTNEED = 4;
170 else version (Solaris)
173 else
175 static assert(false, "Unsupported platform");
179 // Memory Mapped Files, Shared Memory Objects, or Memory Protection (MC2)
182 PROT_READ
183 PROT_WRITE
184 PROT_EXEC
185 PROT_NONE
188 version (linux)
190 enum PROT_NONE = 0x0;
191 enum PROT_READ = 0x1;
192 enum PROT_WRITE = 0x2;
193 enum PROT_EXEC = 0x4;
195 else version (Darwin)
197 enum PROT_NONE = 0x00;
198 enum PROT_READ = 0x01;
199 enum PROT_WRITE = 0x02;
200 enum PROT_EXEC = 0x04;
202 else version (FreeBSD)
204 enum PROT_NONE = 0x00;
205 enum PROT_READ = 0x01;
206 enum PROT_WRITE = 0x02;
207 enum PROT_EXEC = 0x04;
209 else version (NetBSD)
211 enum PROT_NONE = 0x00;
212 enum PROT_READ = 0x01;
213 enum PROT_WRITE = 0x02;
214 enum PROT_EXEC = 0x04;
216 else version (OpenBSD)
218 enum PROT_NONE = 0x00;
219 enum PROT_READ = 0x01;
220 enum PROT_WRITE = 0x02;
221 enum PROT_EXEC = 0x04;
223 else version (DragonFlyBSD)
225 enum PROT_NONE = 0x00;
226 enum PROT_READ = 0x01;
227 enum PROT_WRITE = 0x02;
228 enum PROT_EXEC = 0x04;
230 else version (Solaris)
232 enum PROT_NONE = 0x00;
233 enum PROT_READ = 0x01;
234 enum PROT_WRITE = 0x02;
235 enum PROT_EXEC = 0x04;
237 else
239 static assert(false, "Unsupported platform");
243 // Memory Mapped Files, Shared Memory Objects, or Typed Memory Objects (MC3)
246 void* mmap(void*, size_t, int, int, int, off_t);
247 int munmap(void*, size_t);
250 version (CRuntime_Glibc)
252 static if (__USE_LARGEFILE64) void* mmap64(void*, size_t, int, int, int, off_t);
253 static if (__USE_FILE_OFFSET64)
254 alias mmap = mmap64;
255 else
256 void* mmap(void*, size_t, int, int, int, off_t);
257 int munmap(void*, size_t);
259 else version (Darwin)
261 void* mmap(void*, size_t, int, int, int, off_t);
262 int munmap(void*, size_t);
264 else version (FreeBSD)
266 void* mmap(void*, size_t, int, int, int, off_t);
267 int munmap(void*, size_t);
269 else version (NetBSD)
271 void* mmap(void*, size_t, int, int, int, off_t);
272 int munmap(void*, size_t);
274 else version (OpenBSD)
276 void* mmap(void*, size_t, int, int, int, off_t);
277 int munmap(void*, size_t);
279 else version (DragonFlyBSD)
281 void* mmap(void*, size_t, int, int, int, off_t);
282 int munmap(void*, size_t);
284 else version (Solaris)
286 void* mmap(void*, size_t, int, int, int, off_t);
287 int munmap(void*, size_t);
289 else version (CRuntime_Bionic)
291 void* mmap(void*, size_t, int, int, int, off_t);
292 int munmap(void*, size_t);
294 else version (CRuntime_Musl)
296 static if (__USE_LARGEFILE64) void* mmap64(void*, size_t, int, int, int, off_t);
297 static if (__USE_FILE_OFFSET64)
298 alias mmap = mmap64;
299 else
300 void* mmap(void*, size_t, int, int, int, off_t);
301 int munmap(void*, size_t);
303 else version (CRuntime_UClibc)
305 static if (__USE_LARGEFILE64) void* mmap64(void*, size_t, int, int, int, off_t);
306 static if (__USE_FILE_OFFSET64)
307 alias mmap = mmap64;
308 else
309 void* mmap(void*, size_t, int, int, int, off_t);
310 int munmap(void*, size_t);
312 else
314 static assert(false, "Unsupported platform");
318 // Memory Mapped Files (MF)
321 MAP_SHARED (MF|SHM)
322 MAP_PRIVATE (MF|SHM)
323 MAP_FIXED (MF|SHM)
324 MAP_FAILED (MF|SHM)
326 MS_ASYNC (MF|SIO)
327 MS_SYNC (MF|SIO)
328 MS_INVALIDATE (MF|SIO)
331 version (linux)
333 enum MAP_SHARED = 0x01;
334 enum MAP_PRIVATE = 0x02;
335 enum MAP_FIXED = 0x10;
337 enum MAP_FAILED = cast(void*) -1;
339 version (MICROBLAZE)
340 private enum DEFAULTS = true;
341 else version (Alpha)
343 private enum DEFAULTS = false;
344 enum MAP_ANON = 0x10;
345 enum MS_ASYNC = 1;
346 enum MS_SYNC = 2;
347 enum MS_INVALIDATE = 4;
349 else version (SH)
350 private enum DEFAULTS = true;
351 else version (ARM_Any)
352 private enum DEFAULTS = true;
353 else version (IBMZ_Any)
354 private enum DEFAULTS = true;
355 else version (IA64)
356 private enum DEFAULTS = true;
357 else version (HPPA_Any)
359 private enum DEFAULTS = false;
360 enum MAP_ANON = 0x10;
361 enum MS_SYNC = 1;
362 enum MS_ASYNC = 2;
363 enum MS_INVALIDATE = 4;
365 else version (M68K)
366 private enum DEFAULTS = true;
367 else version (TILE)
368 private enum DEFAULTS = true;
369 else version (X86_Any)
370 private enum DEFAULTS = true;
371 else version (MIPS_Any)
373 private enum DEFAULTS = false;
374 enum MAP_ANON = 0x0800;
375 enum MS_ASYNC = 1;
376 enum MS_INVALIDATE = 2;
377 enum MS_SYNC = 4;
379 else version (RISCV_Any)
380 private enum DEFAULTS = true;
381 else version (SPARC_Any)
382 private enum DEFAULTS = true;
383 else version (PPC_Any)
384 private enum DEFAULTS = true;
385 else version (LoongArch64)
386 private enum DEFAULTS = true;
387 else
388 static assert(0, "unimplemented");
390 static if (DEFAULTS)
392 enum MAP_ANON = 0x20;
393 enum MS_ASYNC = 1;
394 enum MS_INVALIDATE = 2;
395 enum MS_SYNC = 4;
398 else version (Darwin)
400 enum MAP_SHARED = 0x0001;
401 enum MAP_PRIVATE = 0x0002;
402 enum MAP_FIXED = 0x0010;
403 enum MAP_ANON = 0x1000;
405 enum MAP_FAILED = cast(void*)-1;
407 enum MS_ASYNC = 0x0001;
408 enum MS_INVALIDATE = 0x0002;
409 enum MS_SYNC = 0x0010;
411 else version (FreeBSD)
413 enum MAP_SHARED = 0x0001;
414 enum MAP_PRIVATE = 0x0002;
415 enum MAP_FIXED = 0x0010;
416 enum MAP_ANON = 0x1000;
418 enum MAP_FAILED = cast(void*)-1;
420 enum MS_SYNC = 0x0000;
421 enum MS_ASYNC = 0x0001;
422 enum MS_INVALIDATE = 0x0002;
424 else version (NetBSD)
426 enum MAP_SHARED = 0x0001;
427 enum MAP_PRIVATE = 0x0002;
428 enum MAP_FIXED = 0x0010;
429 enum MAP_ANON = 0x1000;
431 enum MAP_FAILED = cast(void*)-1;
433 enum MS_SYNC = 0x0004;
434 enum MS_ASYNC = 0x0001;
435 enum MS_INVALIDATE = 0x0002;
437 else version (OpenBSD)
439 enum MAP_SHARED = 0x0001;
440 enum MAP_PRIVATE = 0x0002;
441 enum MAP_FIXED = 0x0010;
442 enum MAP_ANON = 0x1000;
443 enum MAP_STACK = 0x4000;
445 enum MAP_FAILED = cast(void*)-1;
447 enum MS_SYNC = 0x0002;
448 enum MS_ASYNC = 0x0001;
449 enum MS_INVALIDATE = 0x0004;
451 else version (DragonFlyBSD)
453 enum MAP_SHARED = 0x0001;
454 enum MAP_PRIVATE = 0x0002;
455 enum MAP_FIXED = 0x0010;
456 enum MAP_ANON = 0x1000;
458 enum MAP_FAILED = cast(void*)-1;
460 enum MS_SYNC = 0x0000;
461 enum MS_ASYNC = 0x0001;
462 enum MS_INVALIDATE = 0x0002;
464 else version (Solaris)
466 enum MAP_SHARED = 0x0001;
467 enum MAP_PRIVATE = 0x0002;
468 enum MAP_FIXED = 0x0010;
469 enum MAP_ANON = 0x0100;
471 enum MAP_FAILED = cast(void*)-1;
473 enum MS_SYNC = 0x0004;
474 enum MS_ASYNC = 0x0001;
475 enum MS_INVALIDATE = 0x0002;
477 else
479 static assert(false, "Unsupported platform");
483 int msync(void*, size_t, int); (MF|SIO)
486 version (CRuntime_Glibc)
488 int msync(void*, size_t, int);
490 else version (Darwin)
492 int msync(void*, size_t, int);
494 else version (FreeBSD)
496 int msync(void*, size_t, int);
498 else version (NetBSD)
500 int __msync13(void*, size_t, int);
501 alias msync = __msync13;
503 else version (OpenBSD)
505 int msync(void*, size_t, int);
507 else version (DragonFlyBSD)
509 int msync(void*, size_t, int);
511 else version (Solaris)
513 int msync(void*, size_t, int);
515 else version (CRuntime_Bionic)
517 int msync(const scope void*, size_t, int);
519 else version (CRuntime_Musl)
521 int msync(void*, size_t, int);
523 else version (CRuntime_UClibc)
525 int msync(void*, size_t, int);
527 else
529 static assert(false, "Unsupported platform");
533 // Process Memory Locking (ML)
536 MCL_CURRENT
537 MCL_FUTURE
540 version (linux)
542 version (SPARC_Any) enum
544 MCL_CURRENT = 0x2000,
545 MCL_FUTURE = 0x4000,
547 else version (PPC_Any) enum
549 MCL_CURRENT = 0x2000,
550 MCL_FUTURE = 0x4000,
552 else version (Alpha) enum
554 MCL_CURRENT = 8192,
555 MCL_FUTURE = 16384,
557 else enum
559 MCL_CURRENT = 1,
560 MCL_FUTURE = 2,
563 else version (Darwin)
565 enum MCL_CURRENT = 0x0001;
566 enum MCL_FUTURE = 0x0002;
568 else version (FreeBSD)
570 enum MCL_CURRENT = 0x0001;
571 enum MCL_FUTURE = 0x0002;
573 else version (NetBSD)
575 enum MCL_CURRENT = 0x0001;
576 enum MCL_FUTURE = 0x0002;
578 else version (OpenBSD)
580 enum MCL_CURRENT = 0x0001;
581 enum MCL_FUTURE = 0x0002;
583 else version (DragonFlyBSD)
585 enum MCL_CURRENT = 0x0001;
586 enum MCL_FUTURE = 0x0002;
588 else version (Solaris)
590 enum MCL_CURRENT = 0x0001;
591 enum MCL_FUTURE = 0x0002;
593 else
595 static assert(false, "Unsupported platform");
599 int mlockall(int);
600 int munlockall();
603 version (CRuntime_Glibc)
605 int mlockall(int);
606 int munlockall();
608 else version (Darwin)
610 int mlockall(int);
611 int munlockall();
613 else version (FreeBSD)
615 int mlockall(int);
616 int munlockall();
618 else version (NetBSD)
620 int mlockall(int);
621 int munlockall();
623 else version (OpenBSD)
625 int mlockall(int);
626 int munlockall();
628 else version (DragonFlyBSD)
630 int mlockall(int);
631 int munlockall();
633 else version (Solaris)
635 int mlockall(int);
636 int munlockall();
638 else version (CRuntime_Bionic)
640 int mlockall(int);
641 int munlockall();
643 else version (CRuntime_Musl)
645 int mlockall(int);
646 int munlockall();
648 else version (CRuntime_UClibc)
650 int mlockall(int);
651 int munlockall();
653 else
655 static assert(false, "Unsupported platform");
659 // Range Memory Locking (MLR)
662 int mlock(const scope void*, size_t);
663 int munlock(const scope void*, size_t);
666 version (CRuntime_Glibc)
668 int mlock(const scope void*, size_t);
669 int munlock(const scope void*, size_t);
671 else version (Darwin)
673 int mlock(const scope void*, size_t);
674 int munlock(const scope void*, size_t);
676 else version (FreeBSD)
678 int mlock(const scope void*, size_t);
679 int munlock(const scope void*, size_t);
681 else version (NetBSD)
683 int mlock(const scope void*, size_t);
684 int munlock(const scope void*, size_t);
686 else version (OpenBSD)
688 int mlock(const scope void*, size_t);
689 int munlock(const scope void*, size_t);
691 else version (DragonFlyBSD)
693 int mlock(const scope void*, size_t);
694 int munlock(const scope void*, size_t);
696 else version (Solaris)
698 int mlock(const scope void*, size_t);
699 int munlock(const scope void*, size_t);
701 else version (CRuntime_Bionic)
703 int mlock(const scope void*, size_t);
704 int munlock(const scope void*, size_t);
706 else version (CRuntime_Musl)
708 int mlock(const scope void*, size_t);
709 int munlock(const scope void*, size_t);
711 else version (CRuntime_UClibc)
713 int mlock(const scope void*, size_t);
714 int munlock(const scope void*, size_t);
716 else
718 static assert(false, "Unsupported platform");
722 // Memory Protection (MPR)
725 int mprotect(void*, size_t, int);
728 version (CRuntime_Glibc)
730 int mprotect(void*, size_t, int);
732 else version (Darwin)
734 int mprotect(void*, size_t, int);
736 else version (FreeBSD)
738 int mprotect(void*, size_t, int);
740 else version (NetBSD)
742 int mprotect(void*, size_t, int);
744 else version (OpenBSD)
746 int mprotect(void*, size_t, int);
748 else version (DragonFlyBSD)
750 int mprotect(void*, size_t, int);
752 else version (Solaris)
754 int mprotect(void*, size_t, int);
756 else version (CRuntime_Bionic)
758 int mprotect(const scope void*, size_t, int);
760 else version (CRuntime_Musl)
762 int mprotect(void*, size_t, int);
764 else version (CRuntime_UClibc)
766 int mprotect(void*, size_t, int);
768 else
770 static assert(false, "Unsupported platform");
774 // Shared Memory Objects (SHM)
777 int shm_open(const scope char*, int, mode_t);
778 int shm_unlink(const scope char*);
781 version (CRuntime_Glibc)
783 int shm_open(const scope char*, int, mode_t);
784 int shm_unlink(const scope char*);
786 else version (Darwin)
788 int shm_open(const scope char*, int, mode_t);
789 int shm_unlink(const scope char*);
791 else version (FreeBSD)
793 int shm_open(const scope char*, int, mode_t);
794 int shm_unlink(const scope char*);
796 else version (NetBSD)
798 int shm_open(const scope char*, int, mode_t);
799 int shm_unlink(const scope char*);
801 else version (OpenBSD)
803 int shm_open(const scope char*, int, mode_t);
804 int shm_unlink(const scope char*);
806 else version (DragonFlyBSD)
808 int shm_open(const scope char*, int, mode_t);
809 int shm_unlink(const scope char*);
811 else version (Solaris)
813 int shm_open(const scope char*, int, mode_t);
814 int shm_unlink(const scope char*);
816 else version (CRuntime_Bionic)
819 else version (CRuntime_Musl)
821 int shm_open(const scope char*, int, mode_t);
822 int shm_unlink(const scope char*);
824 else version (CRuntime_UClibc)
826 int shm_open(const scope char*, int, mode_t);
827 int shm_unlink(const scope char*);
829 else
831 static assert(false, "Unsupported platform");
835 // Typed Memory Objects (TYM)
838 POSIX_TYPED_MEM_ALLOCATE
839 POSIX_TYPED_MEM_ALLOCATE_CONTIG
840 POSIX_TYPED_MEM_MAP_ALLOCATABLE
842 struct posix_typed_mem_info
844 size_t posix_tmi_length;
847 int posix_mem_offset(const scope void*, size_t, off_t *, size_t *, int *);
848 int posix_typed_mem_get_info(int, struct posix_typed_mem_info *);
849 int posix_typed_mem_open(const scope char*, int, int);