xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/linux/sys/mman.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
1 /**
2  * D header file for GNU/Linux
3  *
4  * Authors: Martin Nowak
5  */
6 module core.sys.linux.sys.mman;
7 
8 version (linux):
9 extern (C):
10 nothrow:
11 @system:
12 @nogc:
13 
14 version (ARM)     version = ARM_Any;
15 version (AArch64) version = ARM_Any;
16 version (HPPA)    version = HPPA_Any;
17 version (HPPA64)  version = HPPA_Any;
18 version (MIPS32)  version = MIPS_Any;
19 version (MIPS64)  version = MIPS_Any;
20 version (PPC)     version = PPC_Any;
21 version (PPC64)   version = PPC_Any;
22 version (RISCV32) version = RISCV_Any;
23 version (RISCV64) version = RISCV_Any;
24 version (S390)    version = IBMZ_Any;
25 version (SPARC)   version = SPARC_Any;
26 version (SPARC64) version = SPARC_Any;
27 version (SystemZ) version = IBMZ_Any;
28 version (X86)     version = X86_Any;
29 version (X86_64)  version = X86_Any;
30 
31 public import core.sys.posix.sys.mman;
32 import core.sys.linux.config;
33 
34 // <bits/mman.h>
35 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/powerpc/bits/mman.h
version(PPC_Any)36 version (PPC_Any)
37 {
38     enum PROT_SAO = 0x10;
39 
40     static if (_DEFAULT_SOURCE) enum
41     {
42         MAP_GROWSDOWN = 0x00100,
43         MAP_DENYWRITE = 0x00800,
44         MAP_EXECUTABLE = 0x01000,
45         MAP_LOCKED = 0x00080,
46         MAP_NORESERVE = 0x00040,
47         MAP_POPULATE = 0x08000,
48         MAP_NONBLOCK = 0x10000,
49         MAP_STACK = 0x20000,
50         MAP_HUGETLB = 0x40000,
51     }
52 
53     // in core.sys.posix.sys.mman
54     // enum
55     // {
56     //     MCL_CURRENT = 0x2000,
57     //     MCL_FUTURE = 0x4000,
58     // }
59 }
60 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/riscv/bits/mman.h
61 else version (RISCV_Any)
62 {
63     static if (_DEFAULT_SOURCE) enum
64     {
65         MAP_GROWSDOWN = 0x00100,
66         MAP_DENYWRITE = 0x00800,
67         MAP_EXECUTABLE = 0x01000,
68         MAP_LOCKED = 0x02000,
69         MAP_NORESERVE = 0x04000,
70         MAP_POPULATE = 0x08000,
71         MAP_NONBLOCK = 0x10000,
72         MAP_STACK = 0x20000,
73         MAP_HUGETLB = 0x40000,
74         MAP_SYNC = 0x80000,
75         MAP_FIXED_NOREPLACE = 0x100000,
76     }
77 
78     // in core.sys.posix.sys.mman
79     // enum
80     // {
81     //     MCL_CURRENT = 0x2000,
82     //     MCL_FUTURE = 0x4000,
83     // }
84 }
85 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/s390/bits/mman.h
86 else version (IBMZ_Any)
87 {
88     static if (_DEFAULT_SOURCE) enum
89     {
90         MAP_GROWSDOWN = 0x00100,
91         MAP_DENYWRITE = 0x00800,
92         MAP_EXECUTABLE = 0x01000,
93         MAP_LOCKED = 0x02000,
94         MAP_NORESERVE = 0x04000,
95         MAP_POPULATE = 0x08000,
96         MAP_NONBLOCK = 0x10000,
97         MAP_STACK = 0x20000,
98         MAP_HUGETLB = 0x40000,
99     }
100 }
101 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sh/bits/mman.h
102 else version (SH)
103 {
104     static if (_DEFAULT_SOURCE) enum
105     {
106         MAP_GROWSDOWN = 0x0100,
107         MAP_DENYWRITE = 0x0800,
108         MAP_EXECUTABLE = 0x1000,
109         MAP_LOCKED = 0x2000,
110         MAP_NORESERVE = 0x4000,
111         MAP_POPULATE = 0x8000,
112         MAP_NONBLOCK = 0x10000,
113         MAP_STACK = 0x20000,
114         MAP_HUGETLB = 0x40000,
115     }
116 }
117 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h
118 else version (SPARC_Any)
119 {
120     static if (_DEFAULT_SOURCE) enum
121     {
122         MAP_GROWSDOWN = 0x0200,
123         MAP_DENYWRITE = 0x0800,
124         MAP_EXECUTABLE = 0x1000,
125         MAP_LOCKED = 0x0100,
126         MAP_NORESERVE = 0x0040,
127         _MAP_NEW = 0x80000000,
128         MAP_POPULATE = 0x8000,
129         MAP_NONBLOCK = 0x10000,
130         MAP_STACK = 0x20000,
131         MAP_HUGETLB = 0x40000,
132     }
133 
134     // in core.sys.posix.sys.mman
135     // enum
136     // {
137     //     MCL_CURRENT = 0x2000,
138     //     MCL_FUTURE = 0x4000,
139     // }
140 }
141 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/bits/mman.h
142 else version (X86_Any)
143 {
144     static if (_DEFAULT_SOURCE) enum MAP_32BIT = 0x40;
145 
146     static if (_DEFAULT_SOURCE) enum
147     {
148         MAP_GROWSDOWN = 0x00100,
149         MAP_DENYWRITE = 0x00800,
150         MAP_EXECUTABLE = 0x01000,
151         MAP_LOCKED = 0x02000,
152         MAP_NORESERVE = 0x04000,
153         MAP_POPULATE = 0x08000,
154         MAP_NONBLOCK = 0x10000,
155         MAP_STACK = 0x20000,
156         MAP_HUGETLB = 0x40000,
157     }
158 }
159 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/aarch64/bits/mman.h
160 else version (AArch64)
161 {
162     static if (_DEFAULT_SOURCE) enum
163     {
164         MAP_GROWSDOWN = 0x00100,
165         MAP_DENYWRITE = 0x00800,
166         MAP_EXECUTABLE = 0x01000,
167         MAP_LOCKED = 0x02000,
168         MAP_NORESERVE = 0x04000,
169         MAP_POPULATE = 0x08000,
170         MAP_NONBLOCK = 0x10000,
171         MAP_STACK = 0x20000,
172         MAP_HUGETLB = 0x40000,
173     }
174 }
175 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/alpha/bits/mman.h
176 else version (Alpha)
177 {
178     enum
179     {
180         PROT_READ = 0x1,
181         PROT_WRITE = 0x2,
182         PROT_EXEC = 0x4,
183         PROT_NONE = 0x0,
184         PROT_GROWSDOWN = 0x01000000,
185         PROT_GROWSUP = 0x02000000,
186     }
187 
188     enum MAP_SHARED = 0x01;
189     enum MAP_PRIVATE = 0x02;
190     static if (_DEFAULT_SOURCE)
191         enum MAP_TYPE = 0x0f;
192 
193     enum MAP_FIXED = 0x10;
194     static if (_DEFAULT_SOURCE) enum
195     {
196         MAP_FILE = 0,
197         MAP_ANONYMOUS = MAP_ANON,
198         // in core.sys.posix.sys.mman
199         // MAP_ANON = MAP_ANONYMOUS,
200         MAP_HUGE_SHIFT = 26,
201         MAP_HUGE_MASK = 0x3f,
202     }
203 
204     static if (_DEFAULT_SOURCE) enum
205     {
206         MAP_GROWSDOWN = 0x01000,
207         MAP_DENYWRITE = 0x02000,
208         MAP_EXECUTABLE = 0x04000,
209         MAP_LOCKED = 0x08000,
210         MAP_NORESERVE = 0x10000,
211         MAP_POPULATE = 0x20000,
212         MAP_NONBLOCK = 0x40000,
213         MAP_STACK = 0x80000,
214         MAP_HUGETLB = 0x100000,
215     }
216 
217     // in core.sys.posix.sys.mman
218     // enum
219     // {
220     //     MS_ASYNC = 1,
221     //     MS_SYNC = 2,
222     //     MS_INVALIDATE = 4,
223     // }
224 
225     // in core.sys.posix.sys.mman
226     // enum
227     // {
228     //     MCL_CURRENT = 8192,
229     //     MCL_FUTURE = 16384,
230     // }
231 
232     static if (_GNU_SOURCE) enum
233     {
234         MREMAP_MAYMOVE = 1,
235         MREMAP_FIXED = 2,
236     }
237 
238     static if (_DEFAULT_SOURCE) enum
239     {
240         MADV_NORMAL = 0,
241         MADV_RANDOM = 1,
242         MADV_SEQUENTIAL = 2,
243         MADV_WILLNEED = 3,
244         MADV_DONTNEED = 6,
245         MADV_REMOVE = 9,
246         MADV_DONTFORK = 10,
247         MADV_DOFORK = 11,
248         MADV_MERGEABLE = 12,
249         MADV_UNMERGEABLE = 13,
250         MADV_HUGEPAGE = 14,
251         MADV_NOHUGEPAGE = 15,
252         MADV_DONTDUMP = 16,
253         MADV_DODUMP = 17,
254         MADV_HWPOISON = 100,
255     }
256 
257     // in core.sys.posix.sys.mman
258     // static if (_XOPEN_SOURCE >= 600) enum
259     // {
260     //         POSIX_MADV_NORMAL = 0,
261     //         POSIX_MADV_RANDOM = 1,
262     //         POSIX_MADV_SEQUENTIAL = 2,
263     //         POSIX_MADV_WILLNEED = 3,
264     //         POSIX_MADV_DONTNEED = 6,
265     // }
266 }
267 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/arm/bits/mman.h
268 else version (ARM)
269 {
270     static if (_DEFAULT_SOURCE) enum
271     {
272         MAP_GROWSDOWN = 0x00100,
273         MAP_DENYWRITE = 0x00800,
274         MAP_EXECUTABLE = 0x01000,
275         MAP_LOCKED = 0x02000,
276         MAP_NORESERVE = 0x04000,
277         MAP_POPULATE = 0x08000,
278         MAP_NONBLOCK = 0x10000,
279         MAP_STACK = 0x20000,
280         MAP_HUGETLB = 0x40000,
281     }
282 }
283 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/hppa/bits/mman.h
284 else version (HPPA_Any)
285 {
286     enum
287     {
288         PROT_READ = 0x1,
289         PROT_WRITE = 0x2,
290         PROT_EXEC = 0x4,
291         PROT_NONE = 0x0,
292         PROT_GROWSDOWN = 0x01000000,
293         PROT_GROWSUP = 0x02000000,
294     }
295 
296     enum MAP_SHARED = 0x01;
297     enum MAP_PRIVATE = 0x02;
298     static if (_DEFAULT_SOURCE)
299         enum MAP_TYPE = 0x0f;
300 
301     enum MAP_FIXED = 0x04;
302     static if (_DEFAULT_SOURCE) enum
303     {
304         MAP_FILE = 0,
305         MAP_ANONYMOUS = MAP_ANON,
306         // in core.sys.posix.sys.mman
307         // MAP_ANON = MAP_ANONYMOUS,
308         MAP_VARIABLE = 0,
309         MAP_HUGE_SHIFT = 26,
310         MAP_HUGE_MASK = 0x3f,
311     }
312 
313     static if (_DEFAULT_SOURCE) enum
314     {
315         MAP_DENYWRITE = 0x0800,
316         MAP_EXECUTABLE = 0x1000,
317         MAP_LOCKED = 0x2000,
318         MAP_NORESERVE = 0x4000,
319         MAP_GROWSDOWN = 0x8000,
320         MAP_POPULATE = 0x10000,
321         MAP_NONBLOCK = 0x20000,
322     }
323 
324     // in core.sys.posix.sys.mman
325     // enum
326     // {
327     //     MS_ASYNC = 1,
328     //     MS_SYNC = 2,
329     //     MS_INVALIDATE = 4,
330     // }
331 
332     // in core.sys.posix.sys.mman
333     // enum
334     // {
335     //     MCL_CURRENT = 1,
336     //     MCL_FUTURE = 2,
337     // }
338 
339     static if (_GNU_SOURCE) enum
340     {
341         MREMAP_MAYMOVE = 1,
342         MREMAP_FIXED = 2,
343     }
344 
345     static if (_DEFAULT_SOURCE) enum
346     {
347         MADV_NORMAL = 0,
348         MADV_RANDOM = 1,
349         MADV_SEQUENTIAL = 2,
350         MADV_WILLNEED = 3,
351         MADV_DONTNEED = 4,
352         MADV_SPACEAVAIL = 5,
353         MADV_VPS_PURGE = 6,
354         MADV_VPS_INHERIT = 7,
355         MADV_REMOVE = 9,
356         MADV_DONTFORK = 10,
357         MADV_DOFORK = 11,
358         MADV_MERGEABLE = 65,
359         MADV_UNMERGEABLE = 66,
360         MADV_HUGEPAGE = 67,
361         MADV_NOHUGEPAGE = 68,
362         MADV_DONTDUMP = 69,
363     }
364 
365     deprecated("MADV_*_PAGES are gone and never had any effect") enum
366     {
367         MADV_4K_PAGES = 12,
368         MADV_16K_PAGES = 14,
369         MADV_64K_PAGES = 16,
370         MADV_256K_PAGES = 18,
371         MADV_1M_PAGES = 20,
372         MADV_4M_PAGES = 22,
373         MADV_16M_PAGES = 24,
374         MADV_64M_PAGES = 26,
375     }
376 
377     // in core.sys.posix.sys.mman
378     // static if (_XOPEN_SOURCE >= 600) enum
379     // {
380     //     POSIX_MADV_NORMAL = 0,
381     //     POSIX_MADV_RANDOM = 1,
382     //     POSIX_MADV_SEQUENTIAL = 2,
383     //     POSIX_MADV_WILLNEED = 3,
384     //     POSIX_MADV_DONTNEED = 4,
385     // }
386 }
387 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/ia64/bits/mman.h
388 else version (IA64)
389 {
390     static if (_DEFAULT_SOURCE) enum
391     {
392         MAP_GROWSDOWN = 0x00100,
393         MAP_GROWSUP = 0x00200,
394         MAP_DENYWRITE = 0x00800,
395         MAP_EXECUTABLE = 0x01000,
396         MAP_LOCKED = 0x02000,
397         MAP_NORESERVE = 0x04000,
398         MAP_POPULATE = 0x08000,
399         MAP_NONBLOCK = 0x10000,
400         MAP_STACK = 0x20000,
401         MAP_HUGETLB = 0x40000,
402     }
403 }
404 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/m68k/bits/mman.h
405 else version (M68K)
406 {
407     static if (_DEFAULT_SOURCE) enum
408     {
409         MAP_GROWSDOWN = 0x00100,
410         MAP_DENYWRITE = 0x00800,
411         MAP_EXECUTABLE = 0x01000,
412         MAP_LOCKED = 0x02000,
413         MAP_NORESERVE = 0x04000,
414         MAP_POPULATE = 0x08000,
415         MAP_NONBLOCK = 0x10000,
416         MAP_STACK = 0x20000,
417         MAP_HUGETLB = 0x40000,
418     }
419 }
420 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/mman.h
421 else version (MIPS_Any)
422 {
423     static if (_DEFAULT_SOURCE) enum
424     {
425         MAP_NORESERVE = 0x0400,
426         MAP_GROWSDOWN = 0x1000,
427         MAP_DENYWRITE = 0x2000,
428         MAP_EXECUTABLE = 0x4000,
429         MAP_LOCKED = 0x8000,
430         MAP_POPULATE = 0x10000,
431         MAP_NONBLOCK = 0x20000,
432         MAP_STACK = 0x40000,
433         MAP_HUGETLB = 0x80000,
434     }
435 }
436 else
437 {
438     static assert(0, "unimplemented");
439 }
440 
441 
442 // <bits/mman-linux.h>
443 // https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/mman-linux.h
444 version (Alpha)
445 {
446 }
447 else version (HPPA_Any)
448 {
449 }
450 else
451 {
452     // in core.sys.posix.sys.mman
453     // enum PROT_READ = 0x1;
454     // enum PROT_WRITE = 0x2;
455     // enum PROT_EXEC = 0x4;
456     // enum PROT_NONE = 0x0;
457 
458     enum PROT_GROWSDOWN = 0x01000000;
459     enum PROT_GROWSUP = 0x02000000;
460 
461     enum MAP_SHARED = 0x01;
462     enum MAP_PRIVATE = 0x02;
463     static if (_DEFAULT_SOURCE)
464         enum MAP_TYPE = 0x0f;
465 
466     enum MAP_FIXED = 0x10;
467     static if (_DEFAULT_SOURCE) enum
468     {
469         MAP_FILE = 0,
470         MAP_ANONYMOUS = MAP_ANON,
471         // in core.sys.posix.sys.mman
472         // MAP_ANON = 0xXX,
473         MAP_HUGE_SHIFT = 26,
474         MAP_HUGE_MASK = 0x3f,
475     }
476 
477     // in core.sys.posix.sys.mman
478     // enum
479     // {
480     //     MS_ASYNC = 1,
481     //     MS_SYNC = 4,
482     //     MS_INVALIDATE = 2,
483     // }
484 
485     static if (_GNU_SOURCE) enum
486     {
487         MREMAP_MAYMOVE = 1,
488         MREMAP_FIXED = 2,
489     }
490 
491     static if (_DEFAULT_SOURCE) enum
492     {
493         MADV_NORMAL = 0,
494         MADV_RANDOM = 1,
495         MADV_SEQUENTIAL = 2,
496         MADV_WILLNEED = 3,
497         MADV_DONTNEED = 4,
498         MADV_REMOVE = 9,
499         MADV_DONTFORK = 10,
500         MADV_DOFORK = 11,
501         MADV_MERGEABLE = 12,
502         MADV_UNMERGEABLE = 13,
503         MADV_HUGEPAGE = 14,
504         MADV_NOHUGEPAGE = 15,
505         MADV_DONTDUMP = 16,
506         MADV_DODUMP = 17,
507         MADV_HWPOISON = 100,
508     }
509 
510     // in core.sys.posix.sys.mman
511     // static if (_XOPEN_SOURCE >= 600) enum
512     // {
513     //     POSIX_MADV_NORMAL = 0,
514     //     POSIX_MADV_RANDOM = 1,
515     //     POSIX_MADV_SEQUENTIAL = 2,
516     //     POSIX_MADV_WILLNEED = 3,
517     //     POSIX_MADV_DONTNEED = 4,
518     // }
519 
520     // in core.sys.posix.sys.mman
521     // enum
522     // {
523     //
524     //     MCL_CURRENT = 1,
525     //     MCL_FUTURE = 2,
526     // }
527 }
528 
529 // Workaround https://issues.dlang.org/show_bug.cgi?id=17883
530 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h
531 version (SPARC_Any)
532 {
533     static if (_DEFAULT_SOURCE) enum MAP_RENAME = MAP_ANONYMOUS;
534 }
535 // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/mman.h
536 else version (MIPS_Any)
537 {
538     static if (_DEFAULT_SOURCE) enum MAP_RENAME = MAP_ANONYMOUS;
539 }
540 
541 // http://sourceware.org/git/?p=glibc.git;a=blob;f=misc/sys/mman.h
542 // in core.sys.posix.sys.mman
543 // static if (__USE_LARGEFILE64) void* mmap64(void*, size_t, int, int, int, off_t);
544 // static if (__USE_FILE_OFFSET64)
545 //     alias mmap64 mmap;
546 // else
547 //     void* mmap(void*, size_t, int, int, int, off_t);
548 // int munmap(void*, size_t);
549 // int mprotect(void *__addr, size_t __len, int __prot);
550 // int msync(void *__addr, size_t __len, int __flags);
551 static if (_DEFAULT_SOURCE) int madvise(void *__addr, size_t __len, int __advice);
552 // static if (_XOPEN_SOURCE >= 600) int posix_madvise(void *__addr, size_t __len, int __advice);
553 // int mlock(const(void) *__addr, size_t __len);
554 // int munlock(const(void) *__addr, size_t __len);
555 // int mlockall(int __flags);
556 // int munlockall();
557 static if (_DEFAULT_SOURCE) int mincore(void *__start, size_t __len, ubyte *__vec);
558 static if (_GNU_SOURCE) void *mremap(void *__addr, size_t __old_len, size_t __new_len, int __flags, ...);
559 static if (_GNU_SOURCE) int remap_file_pages(void *__start, size_t __size, int __prot, size_t __pgoff, int __flags);
560 // int shm_open(in char *__name, int __oflag, mode_t __mode);
561 // int shm_unlink(in char *__name);
562