blob: e4765af14909377213207db69cee9ff691f0bcbb [file] [log] [blame]
/**
* D header file for GNU/Linux
*
* Authors: Martin Nowak
*/
module core.sys.linux.sys.mman;
version (linux):
extern (C):
nothrow:
@nogc:
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (HPPA64) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
version (PPC64) version = PPC_Any;
version (RISCV32) version = RISCV_Any;
version (RISCV64) version = RISCV_Any;
version (S390) version = IBMZ_Any;
version (SPARC) version = SPARC_Any;
version (SPARC64) version = SPARC_Any;
version (SystemZ) version = IBMZ_Any;
version (X86) version = X86_Any;
version (X86_64) version = X86_Any;
public import core.sys.posix.sys.mman;
import core.sys.linux.config;
// <bits/mman.h>
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/powerpc/bits/mman.h
version (PPC_Any)
{
enum PROT_SAO = 0x10;
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x00080,
MAP_NORESERVE = 0x00040,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
// in core.sys.posix.sys.mman
// enum
// {
// MCL_CURRENT = 0x2000,
// MCL_FUTURE = 0x4000,
// }
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/riscv/bits/mman.h
else version (RISCV_Any)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
MAP_SYNC = 0x80000,
MAP_FIXED_NOREPLACE = 0x100000,
}
// in core.sys.posix.sys.mman
// enum
// {
// MCL_CURRENT = 0x2000,
// MCL_FUTURE = 0x4000,
// }
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/s390/bits/mman.h
else version (IBMZ_Any)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sh/bits/mman.h
else version (SH)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x0100,
MAP_DENYWRITE = 0x0800,
MAP_EXECUTABLE = 0x1000,
MAP_LOCKED = 0x2000,
MAP_NORESERVE = 0x4000,
MAP_POPULATE = 0x8000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h
else version (SPARC_Any)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x0200,
MAP_DENYWRITE = 0x0800,
MAP_EXECUTABLE = 0x1000,
MAP_LOCKED = 0x0100,
MAP_NORESERVE = 0x0040,
_MAP_NEW = 0x80000000,
MAP_POPULATE = 0x8000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
// in core.sys.posix.sys.mman
// enum
// {
// MCL_CURRENT = 0x2000,
// MCL_FUTURE = 0x4000,
// }
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/bits/mman.h
else version (X86_Any)
{
static if (_DEFAULT_SOURCE) enum MAP_32BIT = 0x40;
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/aarch64/bits/mman.h
else version (AArch64)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/alpha/bits/mman.h
else version (Alpha)
{
enum
{
PROT_READ = 0x1,
PROT_WRITE = 0x2,
PROT_EXEC = 0x4,
PROT_NONE = 0x0,
PROT_GROWSDOWN = 0x01000000,
PROT_GROWSUP = 0x02000000,
}
enum MAP_SHARED = 0x01;
enum MAP_PRIVATE = 0x02;
static if (_DEFAULT_SOURCE)
enum MAP_TYPE = 0x0f;
enum MAP_FIXED = 0x10;
static if (_DEFAULT_SOURCE) enum
{
MAP_FILE = 0,
MAP_ANONYMOUS = MAP_ANON,
// in core.sys.posix.sys.mman
// MAP_ANON = MAP_ANONYMOUS,
MAP_HUGE_SHIFT = 26,
MAP_HUGE_MASK = 0x3f,
}
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x01000,
MAP_DENYWRITE = 0x02000,
MAP_EXECUTABLE = 0x04000,
MAP_LOCKED = 0x08000,
MAP_NORESERVE = 0x10000,
MAP_POPULATE = 0x20000,
MAP_NONBLOCK = 0x40000,
MAP_STACK = 0x80000,
MAP_HUGETLB = 0x100000,
}
// in core.sys.posix.sys.mman
// enum
// {
// MS_ASYNC = 1,
// MS_SYNC = 2,
// MS_INVALIDATE = 4,
// }
// in core.sys.posix.sys.mman
// enum
// {
// MCL_CURRENT = 8192,
// MCL_FUTURE = 16384,
// }
static if (_GNU_SOURCE) enum
{
MREMAP_MAYMOVE = 1,
MREMAP_FIXED = 2,
}
static if (_DEFAULT_SOURCE) enum
{
MADV_NORMAL = 0,
MADV_RANDOM = 1,
MADV_SEQUENTIAL = 2,
MADV_WILLNEED = 3,
MADV_DONTNEED = 6,
MADV_REMOVE = 9,
MADV_DONTFORK = 10,
MADV_DOFORK = 11,
MADV_MERGEABLE = 12,
MADV_UNMERGEABLE = 13,
MADV_HUGEPAGE = 14,
MADV_NOHUGEPAGE = 15,
MADV_DONTDUMP = 16,
MADV_DODUMP = 17,
MADV_HWPOISON = 100,
}
// in core.sys.posix.sys.mman
// static if (_XOPEN_SOURCE >= 600) enum
// {
// POSIX_MADV_NORMAL = 0,
// POSIX_MADV_RANDOM = 1,
// POSIX_MADV_SEQUENTIAL = 2,
// POSIX_MADV_WILLNEED = 3,
// POSIX_MADV_DONTNEED = 6,
// }
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/arm/bits/mman.h
else version (ARM)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/hppa/bits/mman.h
else version (HPPA_Any)
{
enum
{
PROT_READ = 0x1,
PROT_WRITE = 0x2,
PROT_EXEC = 0x4,
PROT_NONE = 0x0,
PROT_GROWSDOWN = 0x01000000,
PROT_GROWSUP = 0x02000000,
}
enum MAP_SHARED = 0x01;
enum MAP_PRIVATE = 0x02;
static if (_DEFAULT_SOURCE)
enum MAP_TYPE = 0x0f;
enum MAP_FIXED = 0x04;
static if (_DEFAULT_SOURCE) enum
{
MAP_FILE = 0,
MAP_ANONYMOUS = MAP_ANON,
// in core.sys.posix.sys.mman
// MAP_ANON = MAP_ANONYMOUS,
MAP_VARIABLE = 0,
MAP_HUGE_SHIFT = 26,
MAP_HUGE_MASK = 0x3f,
}
static if (_DEFAULT_SOURCE) enum
{
MAP_DENYWRITE = 0x0800,
MAP_EXECUTABLE = 0x1000,
MAP_LOCKED = 0x2000,
MAP_NORESERVE = 0x4000,
MAP_GROWSDOWN = 0x8000,
MAP_POPULATE = 0x10000,
MAP_NONBLOCK = 0x20000,
}
// in core.sys.posix.sys.mman
// enum
// {
// MS_ASYNC = 1,
// MS_SYNC = 2,
// MS_INVALIDATE = 4,
// }
// in core.sys.posix.sys.mman
// enum
// {
// MCL_CURRENT = 1,
// MCL_FUTURE = 2,
// }
static if (_GNU_SOURCE) enum
{
MREMAP_MAYMOVE = 1,
MREMAP_FIXED = 2,
}
static if (_DEFAULT_SOURCE) enum
{
MADV_NORMAL = 0,
MADV_RANDOM = 1,
MADV_SEQUENTIAL = 2,
MADV_WILLNEED = 3,
MADV_DONTNEED = 4,
MADV_SPACEAVAIL = 5,
MADV_VPS_PURGE = 6,
MADV_VPS_INHERIT = 7,
MADV_REMOVE = 9,
MADV_DONTFORK = 10,
MADV_DOFORK = 11,
MADV_MERGEABLE = 65,
MADV_UNMERGEABLE = 66,
MADV_HUGEPAGE = 67,
MADV_NOHUGEPAGE = 68,
MADV_DONTDUMP = 69,
}
deprecated("MADV_*_PAGES are gone and never had any effect") enum
{
MADV_4K_PAGES = 12,
MADV_16K_PAGES = 14,
MADV_64K_PAGES = 16,
MADV_256K_PAGES = 18,
MADV_1M_PAGES = 20,
MADV_4M_PAGES = 22,
MADV_16M_PAGES = 24,
MADV_64M_PAGES = 26,
}
// in core.sys.posix.sys.mman
// static if (_XOPEN_SOURCE >= 600) enum
// {
// POSIX_MADV_NORMAL = 0,
// POSIX_MADV_RANDOM = 1,
// POSIX_MADV_SEQUENTIAL = 2,
// POSIX_MADV_WILLNEED = 3,
// POSIX_MADV_DONTNEED = 4,
// }
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/ia64/bits/mman.h
else version (IA64)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_GROWSUP = 0x00200,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/m68k/bits/mman.h
else version (M68K)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/mman.h
else version (MIPS_Any)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_NORESERVE = 0x0400,
MAP_GROWSDOWN = 0x1000,
MAP_DENYWRITE = 0x2000,
MAP_EXECUTABLE = 0x4000,
MAP_LOCKED = 0x8000,
MAP_POPULATE = 0x10000,
MAP_NONBLOCK = 0x20000,
MAP_STACK = 0x40000,
MAP_HUGETLB = 0x80000,
}
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/bits/mman-map-flags-generic.h
else version (LoongArch64)
{
static if (_DEFAULT_SOURCE) enum
{
MAP_GROWSDOWN = 0x00100,
MAP_DENYWRITE = 0x00800,
MAP_EXECUTABLE = 0x01000,
MAP_LOCKED = 0x02000,
MAP_NORESERVE = 0x04000,
MAP_POPULATE = 0x08000,
MAP_NONBLOCK = 0x10000,
MAP_STACK = 0x20000,
MAP_HUGETLB = 0x40000,
MAP_SYNC = 0x80000,
MAP_FIXED_NOREPLACE = 0x100000,
}
// in core.sys.posix.sys.mman
// enum
// {
// MCL_CURRENT = 0x1,
// MCL_FUTURE = 0x2,
// }
}
else
{
static assert(0, "unimplemented");
}
// <bits/mman-linux.h>
// https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/mman-linux.h
version (Alpha)
{
}
else version (HPPA_Any)
{
}
else
{
// in core.sys.posix.sys.mman
// enum PROT_READ = 0x1;
// enum PROT_WRITE = 0x2;
// enum PROT_EXEC = 0x4;
// enum PROT_NONE = 0x0;
enum PROT_GROWSDOWN = 0x01000000;
enum PROT_GROWSUP = 0x02000000;
enum MAP_SHARED = 0x01;
enum MAP_PRIVATE = 0x02;
static if (_DEFAULT_SOURCE)
enum MAP_TYPE = 0x0f;
enum MAP_FIXED = 0x10;
static if (_DEFAULT_SOURCE) enum
{
MAP_FILE = 0,
MAP_ANONYMOUS = MAP_ANON,
// in core.sys.posix.sys.mman
// MAP_ANON = 0xXX,
MAP_HUGE_SHIFT = 26,
MAP_HUGE_MASK = 0x3f,
}
// in core.sys.posix.sys.mman
// enum
// {
// MS_ASYNC = 1,
// MS_SYNC = 4,
// MS_INVALIDATE = 2,
// }
static if (_GNU_SOURCE) enum
{
MREMAP_MAYMOVE = 1,
MREMAP_FIXED = 2,
}
static if (_DEFAULT_SOURCE) enum
{
MADV_NORMAL = 0,
MADV_RANDOM = 1,
MADV_SEQUENTIAL = 2,
MADV_WILLNEED = 3,
MADV_DONTNEED = 4,
MADV_REMOVE = 9,
MADV_DONTFORK = 10,
MADV_DOFORK = 11,
MADV_MERGEABLE = 12,
MADV_UNMERGEABLE = 13,
MADV_HUGEPAGE = 14,
MADV_NOHUGEPAGE = 15,
MADV_DONTDUMP = 16,
MADV_DODUMP = 17,
MADV_HWPOISON = 100,
}
// in core.sys.posix.sys.mman
// static if (_XOPEN_SOURCE >= 600) enum
// {
// POSIX_MADV_NORMAL = 0,
// POSIX_MADV_RANDOM = 1,
// POSIX_MADV_SEQUENTIAL = 2,
// POSIX_MADV_WILLNEED = 3,
// POSIX_MADV_DONTNEED = 4,
// }
// in core.sys.posix.sys.mman
// enum
// {
//
// MCL_CURRENT = 1,
// MCL_FUTURE = 2,
// }
}
// Workaround https://issues.dlang.org/show_bug.cgi?id=17883
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h
version (SPARC_Any)
{
static if (_DEFAULT_SOURCE) enum MAP_RENAME = MAP_ANONYMOUS;
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/mman.h
else version (MIPS_Any)
{
static if (_DEFAULT_SOURCE) enum MAP_RENAME = MAP_ANONYMOUS;
}
// http://sourceware.org/git/?p=glibc.git;a=blob;f=misc/sys/mman.h
// in core.sys.posix.sys.mman
// static if (__USE_LARGEFILE64) void* mmap64(void*, size_t, int, int, int, off_t);
// static if (__USE_FILE_OFFSET64)
// alias mmap64 mmap;
// else
// void* mmap(void*, size_t, int, int, int, off_t);
// int munmap(void*, size_t);
// int mprotect(void *__addr, size_t __len, int __prot);
// int msync(void *__addr, size_t __len, int __flags);
static if (_DEFAULT_SOURCE) int madvise(void *__addr, size_t __len, int __advice);
// static if (_XOPEN_SOURCE >= 600) int posix_madvise(void *__addr, size_t __len, int __advice);
// int mlock(const(void) *__addr, size_t __len);
// int munlock(const(void) *__addr, size_t __len);
// int mlockall(int __flags);
// int munlockall();
static if (_DEFAULT_SOURCE) int mincore(void *__start, size_t __len, ubyte *__vec);
static if (_GNU_SOURCE) void *mremap(void *__addr, size_t __old_len, size_t __new_len, int __flags, ...);
static if (_GNU_SOURCE) int remap_file_pages(void *__start, size_t __size, int __prot, size_t __pgoff, int __flags);
// int shm_open(in char *__name, int __oflag, mode_t __mode);
// int shm_unlink(in char *__name);