1/** 2 * D header file for GNU/Linux 3 * 4 * Authors: Martin Nowak 5 */ 6module core.sys.linux.sys.mman; 7 8version (linux): 9extern (C): 10nothrow: 11@system: 12@nogc: 13 14version (ARM) version = ARM_Any; 15version (AArch64) version = ARM_Any; 16version (HPPA) version = HPPA_Any; 17version (HPPA64) version = HPPA_Any; 18version (MIPS32) version = MIPS_Any; 19version (MIPS64) version = MIPS_Any; 20version (PPC) version = PPC_Any; 21version (PPC64) version = PPC_Any; 22version (RISCV32) version = RISCV_Any; 23version (RISCV64) version = RISCV_Any; 24version (S390) version = IBMZ_Any; 25version (SPARC) version = SPARC_Any; 26version (SPARC64) version = SPARC_Any; 27version (SystemZ) version = IBMZ_Any; 28version (X86) version = X86_Any; 29version (X86_64) version = X86_Any; 30 31public import core.sys.posix.sys.mman; 32import 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 36version (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 61else 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 86else 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 102else 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 118else 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 142else 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 160else 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 176else 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 268else 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 284else 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 388else 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 405else 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 421else 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} 436else 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 444version (Alpha) 445{ 446} 447else version (HPPA_Any) 448{ 449} 450else 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 531version (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 536else 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); 551static 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(); 557static if (_DEFAULT_SOURCE) int mincore(void *__start, size_t __len, ubyte *__vec); 558static if (_GNU_SOURCE) void *mremap(void *__addr, size_t __old_len, size_t __new_len, int __flags, ...); 559static 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