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