diff --git a/lib/std/c.zig b/lib/std/c.zig index e494931114..e03a16314f 100644 --- a/lib/std/c.zig +++ b/lib/std/c.zig @@ -45,6 +45,148 @@ pub usingnamespace switch (builtin.os.tag) { else => struct {}, }; +pub const MAP = switch (builtin.os.tag) { + .linux => std.os.linux.MAP, + .emscripten => packed struct(u32) { + TYPE: enum(u4) { + SHARED = 0x01, + PRIVATE = 0x02, + SHARED_VALIDATE = 0x03, + }, + FIXED: bool = false, + ANONYMOUS: bool = false, + _6: u2 = 0, + GROWSDOWN: bool = false, + _9: u2 = 0, + DENYWRITE: bool = false, + EXECUTABLE: bool = false, + LOCKED: bool = false, + NORESERVE: bool = false, + POPULATE: bool = false, + NONBLOCK: bool = false, + STACK: bool = false, + HUGETLB: bool = false, + SYNC: bool = false, + FIXED_NOREPLACE: bool = false, + _: u11 = 0, + }, + .solaris, .illumos => packed struct(u32) { + TYPE: enum(u4) { + SHARED = 0x01, + PRIVATE = 0x02, + }, + FIXED: bool = false, + RENAME: bool = false, + NORESERVE: bool = false, + @"32BIT": bool = false, + ANONYMOUS: bool = false, + ALIGN: bool = false, + TEXT: bool = false, + INITDATA: bool = false, + _: u20 = 0, + }, + .netbsd => packed struct(u32) { + TYPE: enum(u2) { + SHARED = 0x01, + PRIVATE = 0x02, + }, + REMAPDUP: bool = false, + _3: u1 = 0, + FIXED: bool = false, + RENAME: bool = false, + NORESERVE: bool = false, + INHERIT: bool = false, + _8: u1 = 0, + HASSEMAPHORE: bool = false, + TRYFIXED: bool = false, + WIRED: bool = false, + ANONYMOUS: bool = false, + STACK: bool = false, + _: u18 = 0, + }, + .openbsd => packed struct(u32) { + TYPE: enum(u4) { + SHARED = 0x01, + PRIVATE = 0x02, + }, + FIXED: bool = false, + _5: u7 = 0, + ANONYMOUS: bool = false, + _13: u1 = 0, + STACK: bool = false, + CONCEAL: bool = false, + _: u16 = 0, + }, + .haiku => packed struct(u32) { + TYPE: enum(u2) { + SHARED = 0x01, + PRIVATE = 0x02, + }, + FIXED: bool = false, + ANONYMOUS: bool = false, + NORESERVE: bool = false, + _: u27 = 0, + }, + .macos, .ios, .tvos, .watchos => packed struct(u32) { + TYPE: enum(u4) { + SHARED = 0x01, + PRIVATE = 0x02, + }, + FIXED: bool = false, + _5: u1 = 0, + NORESERVE: bool = false, + _7: u2 = 0, + HASSEMAPHORE: bool = false, + NOCACHE: bool = false, + _11: u1 = 0, + ANONYMOUS: bool = false, + _: u19 = 0, + }, + .dragonfly => packed struct(u32) { + TYPE: enum(u4) { + SHARED = 0x01, + PRIVATE = 0x02, + }, + FIXED: bool = false, + RENAME: bool = false, + NORESERVE: bool = false, + INHERIT: bool = false, + NOEXTEND: bool = false, + HASSEMAPHORE: bool = false, + STACK: bool = false, + NOSYNC: bool = false, + ANONYMOUS: bool = false, + VPAGETABLE: bool = false, + _14: u2 = 0, + TRYFIXED: bool = false, + NOCORE: bool = false, + SIZEALIGN: bool = false, + _: u13 = 0, + }, + .freebsd => packed struct(u32) { + TYPE: enum(u4) { + SHARED = 0x01, + PRIVATE = 0x02, + }, + FIXED: bool = false, + _5: u5 = 0, + STACK: bool = false, + NOSYNC: bool = false, + ANONYMOUS: bool = false, + GUARD: bool = false, + EXCL: bool = false, + _15: u2 = 0, + NOCORE: bool = false, + PREFAULT_READ: bool = false, + @"32BIT": bool = false, + _: u12 = 0, + }, + else => @compileError("target libc does not have MAP"), +}; + +/// Used by libc to communicate failure. Not actually part of the underlying syscall. +pub const MAP_FAILED: *anyopaque = @ptrFromInt(std.math.maxInt(usize)); + pub const whence_t = if (builtin.os.tag == .wasi) std.os.wasi.whence_t else c_int; // Unix-like systems diff --git a/lib/std/c/darwin.zig b/lib/std/c/darwin.zig index cc195f2bf0..a80c65f76c 100644 --- a/lib/std/c/darwin.zig +++ b/lib/std/c/darwin.zig @@ -1310,26 +1310,6 @@ pub const PROT = struct { pub const COPY: vm_prot_t = 0x10; }; -pub const MAP = struct { - /// allocated from memory, swap space - pub const ANONYMOUS = 0x1000; - /// map from file (default) - pub const FILE = 0x0000; - /// interpret addr exactly - pub const FIXED = 0x0010; - /// region may contain semaphores - pub const HASSEMAPHORE = 0x0200; - /// changes are private - pub const PRIVATE = 0x0002; - /// share changes - pub const SHARED = 0x0001; - /// don't cache pages for this mapping - pub const NOCACHE = 0x0400; - /// don't reserve needed swap area - pub const NORESERVE = 0x0040; - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); -}; - pub const MSF = struct { pub const ASYNC = 0x1; pub const INVALIDATE = 0x2; diff --git a/lib/std/c/dragonfly.zig b/lib/std/c/dragonfly.zig index 15a5f7ef04..5474d79d38 100644 --- a/lib/std/c/dragonfly.zig +++ b/lib/std/c/dragonfly.zig @@ -223,28 +223,6 @@ pub const PROT = struct { pub const EXEC = 4; }; -pub const MAP = struct { - pub const FILE = 0; - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); - pub const ANONYMOUS = ANON; - pub const COPY = PRIVATE; - pub const SHARED = 1; - pub const PRIVATE = 2; - pub const FIXED = 16; - pub const RENAME = 32; - pub const NORESERVE = 64; - pub const INHERIT = 128; - pub const NOEXTEND = 256; - pub const HASSEMAPHORE = 512; - pub const STACK = 1024; - pub const NOSYNC = 2048; - pub const ANON = 4096; - pub const VPAGETABLE = 8192; - pub const TRYFIXED = 65536; - pub const NOCORE = 131072; - pub const SIZEALIGN = 262144; -}; - pub const MSF = struct { pub const ASYNC = 1; pub const INVALIDATE = 2; diff --git a/lib/std/c/emscripten.zig b/lib/std/c/emscripten.zig index e213b81663..ca64473016 100644 --- a/lib/std/c/emscripten.zig +++ b/lib/std/c/emscripten.zig @@ -16,11 +16,6 @@ pub const IOV_MAX = emscripten.IOV_MAX; pub const IPPROTO = emscripten.IPPROTO; pub const LOCK = emscripten.LOCK; pub const MADV = emscripten.MADV; -pub const MAP = struct { - pub usingnamespace emscripten.MAP; - /// Only used by libc to communicate failure. - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); -}; pub const MSF = emscripten.MSF; pub const MSG = emscripten.MSG; pub const NAME_MAX = emscripten.NAME_MAX; diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig index 6a8997bedf..a1b64893b8 100644 --- a/lib/std/c/freebsd.zig +++ b/lib/std/c/freebsd.zig @@ -606,29 +606,6 @@ pub const CLOCK = struct { pub const PROCESS_CPUTIME_ID = 15; }; -pub const MAP = struct { - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); - pub const SHARED = 0x0001; - pub const PRIVATE = 0x0002; - pub const FIXED = 0x0010; - pub const STACK = 0x0400; - pub const NOSYNC = 0x0800; - pub const ANON = 0x1000; - pub const ANONYMOUS = ANON; - pub const FILE = 0; - - pub const GUARD = 0x00002000; - pub const EXCL = 0x00004000; - pub const NOCORE = 0x00020000; - pub const PREFAULT_READ = 0x00040000; - pub const @"32BIT" = 0x00080000; - - pub fn ALIGNED(alignment: u32) u32 { - return alignment << 24; - } - pub const ALIGNED_SUPER = ALIGNED(1); -}; - pub const MADV = struct { pub const NORMAL = 0; pub const RANDOM = 1; diff --git a/lib/std/c/haiku.zig b/lib/std/c/haiku.zig index a64eb03b41..c8cc16563a 100644 --- a/lib/std/c/haiku.zig +++ b/lib/std/c/haiku.zig @@ -408,22 +408,6 @@ pub const CLOCK = struct { pub const THREAD_CPUTIME_ID = -3; }; -pub const MAP = struct { - /// mmap() error return code - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); - /// changes are seen by others - pub const SHARED = 0x01; - /// changes are only seen by caller - pub const PRIVATE = 0x02; - /// require mapping to specified addr - pub const FIXED = 0x04; - /// no underlying object - pub const ANONYMOUS = 0x0008; - pub const ANON = ANONYMOUS; - /// don't commit memory - pub const NORESERVE = 0x10; -}; - pub const MSF = struct { pub const ASYNC = 1; pub const INVALIDATE = 2; diff --git a/lib/std/c/linux.zig b/lib/std/c/linux.zig index c9efd69dcd..c847d58bef 100644 --- a/lib/std/c/linux.zig +++ b/lib/std/c/linux.zig @@ -1,6 +1,5 @@ const std = @import("../std.zig"); const builtin = @import("builtin"); -const maxInt = std.math.maxInt; const native_abi = builtin.abi; const native_arch = builtin.cpu.arch; const linux = std.os.linux; @@ -25,11 +24,6 @@ pub const IOV_MAX = linux.IOV_MAX; pub const IPPROTO = linux.IPPROTO; pub const LOCK = linux.LOCK; pub const MADV = linux.MADV; -pub const MAP = struct { - pub usingnamespace linux.MAP; - /// Only used by libc to communicate failure. - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); -}; pub const MSF = linux.MSF; pub const MMAP2_UNIT = linux.MMAP2_UNIT; pub const MSG = linux.MSG; diff --git a/lib/std/c/netbsd.zig b/lib/std/c/netbsd.zig index 2380314429..2c100e2c37 100644 --- a/lib/std/c/netbsd.zig +++ b/lib/std/c/netbsd.zig @@ -573,26 +573,6 @@ pub const CLOCK = struct { pub const PROCESS_CPUTIME_ID = 0x40000000; }; -pub const MAP = struct { - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); - pub const SHARED = 0x0001; - pub const PRIVATE = 0x0002; - pub const REMAPDUP = 0x0004; - pub const FIXED = 0x0010; - pub const RENAME = 0x0020; - pub const NORESERVE = 0x0040; - pub const INHERIT = 0x0080; - pub const HASSEMAPHORE = 0x0200; - pub const TRYFIXED = 0x0400; - pub const WIRED = 0x0800; - - pub const FILE = 0x0000; - pub const NOSYNC = 0x0800; - pub const ANON = 0x1000; - pub const ANONYMOUS = ANON; - pub const STACK = 0x2000; -}; - pub const MSF = struct { pub const ASYNC = 1; pub const INVALIDATE = 2; diff --git a/lib/std/c/openbsd.zig b/lib/std/c/openbsd.zig index 33a60df954..a5e275913b 100644 --- a/lib/std/c/openbsd.zig +++ b/lib/std/c/openbsd.zig @@ -436,24 +436,6 @@ pub const CLOCK = struct { pub const THREAD_CPUTIME_ID = 4; }; -pub const MAP = struct { - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); - pub const SHARED = 0x0001; - pub const PRIVATE = 0x0002; - pub const FIXED = 0x0010; - pub const RENAME = 0; - pub const NORESERVE = 0; - pub const INHERIT = 0; - pub const HASSEMAPHORE = 0; - pub const TRYFIXED = 0; - - pub const FILE = 0; - pub const ANON = 0x1000; - pub const ANONYMOUS = ANON; - pub const STACK = 0x4000; - pub const CONCEAL = 0x8000; -}; - pub const MSF = struct { pub const ASYNC = 1; pub const INVALIDATE = 2; diff --git a/lib/std/c/solaris.zig b/lib/std/c/solaris.zig index 3ec8c3aa97..c533ef2ca5 100644 --- a/lib/std/c/solaris.zig +++ b/lib/std/c/solaris.zig @@ -523,27 +523,6 @@ pub const CLOCK = struct { pub const PROF = THREAD_CPUTIME_ID; }; -pub const MAP = struct { - pub const FAILED = @as(*anyopaque, @ptrFromInt(maxInt(usize))); - pub const SHARED = 0x0001; - pub const PRIVATE = 0x0002; - pub const TYPE = 0x000f; - - pub const FILE = 0x0000; - pub const FIXED = 0x0010; - // Unimplemented - pub const RENAME = 0x0020; - pub const NORESERVE = 0x0040; - /// Force mapping in lower 4G address space - pub const @"32BIT" = 0x0080; - - pub const ANON = 0x0100; - pub const ANONYMOUS = ANON; - pub const ALIGN = 0x0200; - pub const TEXT = 0x0400; - pub const INITDATA = 0x0800; -}; - pub const MSF = struct { pub const ASYNC = 1; pub const INVALIDATE = 2; diff --git a/lib/std/os.zig b/lib/std/os.zig index dca923e6ba..de414338f4 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -4666,7 +4666,7 @@ pub fn mmap( const ioffset: i64 = @bitCast(offset); // the OS treats this as unsigned const rc = mmap_sym(ptr, length, prot, @bitCast(flags), fd, ioffset); const err = if (builtin.link_libc) blk: { - if (rc != std.c.MAP.FAILED) return @as([*]align(mem.page_size) u8, @ptrCast(@alignCast(rc)))[0..length]; + if (rc != std.c.MAP_FAILED) return @as([*]align(mem.page_size) u8, @ptrCast(@alignCast(rc)))[0..length]; break :blk @as(E, @enumFromInt(system._errno().*)); } else blk: { const err = errno(rc); diff --git a/lib/std/os/emscripten.zig b/lib/std/os/emscripten.zig index 5bfa33766a..883136b39a 100644 --- a/lib/std/os/emscripten.zig +++ b/lib/std/os/emscripten.zig @@ -449,27 +449,6 @@ pub const MADV = struct { pub const SOFT_OFFLINE = 101; }; -pub const MAP = struct { - pub const SHARED = 0x01; - pub const PRIVATE = 0x02; - pub const SHARED_VALIDATE = 0x03; - pub const TYPE = 0x0f; - pub const FIXED = 0x10; - pub const ANON = 0x20; - pub const ANONYMOUS = ANON; - pub const NORESERVE = 0x4000; - pub const GROWSDOWN = 0x0100; - pub const DENYWRITE = 0x0800; - pub const EXECUTABLE = 0x1000; - pub const LOCKED = 0x2000; - pub const POPULATE = 0x8000; - pub const NONBLOCK = 0x10000; - pub const STACK = 0x20000; - pub const HUGETLB = 0x40000; - pub const SYNC = 0x80000; - pub const FIXED_NOREPLACE = 0x100000; -}; - pub const MSF = struct { pub const ASYNC = 1; pub const INVALIDATE = 2;