diff options
| -rw-r--r-- | lib/std/Thread.zig | 2 | ||||
| -rw-r--r-- | lib/std/crypto/tlcsprng.zig | 2 | ||||
| -rw-r--r-- | lib/std/debug.zig | 2 | ||||
| -rw-r--r-- | lib/std/dynamic_library.zig | 8 | ||||
| -rw-r--r-- | lib/std/heap/PageAllocator.zig | 2 | ||||
| -rw-r--r-- | lib/std/os.zig | 6 | ||||
| -rw-r--r-- | lib/std/os/linux.zig | 160 | ||||
| -rw-r--r-- | lib/std/os/linux/arm-eabi.zig | 13 | ||||
| -rw-r--r-- | lib/std/os/linux/arm64.zig | 13 | ||||
| -rw-r--r-- | lib/std/os/linux/io_uring.zig | 4 | ||||
| -rw-r--r-- | lib/std/os/linux/mips.zig | 9 | ||||
| -rw-r--r-- | lib/std/os/linux/mips64.zig | 9 | ||||
| -rw-r--r-- | lib/std/os/linux/powerpc.zig | 13 | ||||
| -rw-r--r-- | lib/std/os/linux/powerpc64.zig | 13 | ||||
| -rw-r--r-- | lib/std/os/linux/riscv64.zig | 1 | ||||
| -rw-r--r-- | lib/std/os/linux/sparc64.zig | 13 | ||||
| -rw-r--r-- | lib/std/os/linux/tls.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/x86.zig | 9 | ||||
| -rw-r--r-- | lib/std/os/linux/x86_64.zig | 15 | ||||
| -rw-r--r-- | lib/std/os/test.zig | 6 |
20 files changed, 147 insertions, 155 deletions
diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index a90d775152..c3f628da79 100644 --- a/lib/std/Thread.zig +++ b/lib/std/Thread.zig @@ -1237,7 +1237,7 @@ const LinuxThreadImpl = struct { null, map_bytes, os.PROT.NONE, - os.MAP.PRIVATE | os.MAP.ANONYMOUS, + .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, -1, 0, ) catch |err| switch (err) { diff --git a/lib/std/crypto/tlcsprng.zig b/lib/std/crypto/tlcsprng.zig index cdb3494fc6..bbca32024e 100644 --- a/lib/std/crypto/tlcsprng.zig +++ b/lib/std/crypto/tlcsprng.zig @@ -83,7 +83,7 @@ fn tlsCsprngFill(_: *anyopaque, buffer: []u8) void { null, @sizeOf(Context), os.PROT.READ | os.PROT.WRITE, - os.MAP.PRIVATE | os.MAP.ANONYMOUS, + .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, -1, 0, ) catch { diff --git a/lib/std/debug.zig b/lib/std/debug.zig index 5976e52684..7f44cfa770 100644 --- a/lib/std/debug.zig +++ b/lib/std/debug.zig @@ -1652,7 +1652,7 @@ fn mapWholeFile(file: File) ![]align(mem.page_size) const u8 { null, file_len, os.PROT.READ, - os.MAP.SHARED, + .{ .TYPE = .SHARED }, file.handle, 0, ); diff --git a/lib/std/dynamic_library.zig b/lib/std/dynamic_library.zig index 42a2c6ddbd..ee2b905aeb 100644 --- a/lib/std/dynamic_library.zig +++ b/lib/std/dynamic_library.zig @@ -127,7 +127,7 @@ pub const ElfDynLib = struct { null, mem.alignForward(usize, size, mem.page_size), os.PROT.READ, - os.MAP.PRIVATE, + .{ .TYPE = .PRIVATE }, fd, 0, ); @@ -165,7 +165,7 @@ pub const ElfDynLib = struct { null, virt_addr_end, os.PROT.NONE, - os.MAP.PRIVATE | os.MAP.ANONYMOUS, + .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, -1, 0, ); @@ -197,7 +197,7 @@ pub const ElfDynLib = struct { ptr, extended_memsz, prot, - os.MAP.PRIVATE | os.MAP.FIXED, + .{ .TYPE = .PRIVATE, .FIXED = true }, fd, ph.p_offset - extra_bytes, ); @@ -206,7 +206,7 @@ pub const ElfDynLib = struct { ptr, extended_memsz, prot, - os.MAP.PRIVATE | os.MAP.FIXED | os.MAP.ANONYMOUS, + .{ .TYPE = .PRIVATE, .FIXED = true, .ANONYMOUS = true }, -1, 0, ); diff --git a/lib/std/heap/PageAllocator.zig b/lib/std/heap/PageAllocator.zig index 3e92aa5eec..822a4c2c34 100644 --- a/lib/std/heap/PageAllocator.zig +++ b/lib/std/heap/PageAllocator.zig @@ -35,7 +35,7 @@ fn alloc(_: *anyopaque, n: usize, log2_align: u8, ra: usize) ?[*]u8 { hint, aligned_len, os.PROT.READ | os.PROT.WRITE, - os.MAP.PRIVATE | os.MAP.ANONYMOUS, + .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, -1, 0, ) catch return null; diff --git a/lib/std/os.zig b/lib/std/os.zig index e12753ab3e..dca923e6ba 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -4657,14 +4657,14 @@ pub fn mmap( ptr: ?[*]align(mem.page_size) u8, length: usize, prot: u32, - flags: u32, + flags: system.MAP, fd: fd_t, offset: u64, ) MMapError![]align(mem.page_size) u8 { const mmap_sym = if (lfs64_abi) system.mmap64 else system.mmap; - const ioffset = @as(i64, @bitCast(offset)); // the OS treats this as unsigned - const rc = mmap_sym(ptr, length, prot, flags, fd, ioffset); + 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]; break :blk @as(E, @enumFromInt(system._errno().*)); diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index ee5fe0f186..0a6e4fee1d 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -109,36 +109,136 @@ pub const SYS = switch (@import("builtin").cpu.arch) { else => @compileError("The Zig Standard Library is missing syscall definitions for the target CPU architecture"), }; -pub const MAP = struct { - pub usingnamespace arch_bits.MAP; - - /// Share changes - pub const SHARED = 0x01; - /// Changes are private - pub const PRIVATE = 0x02; - /// share + validate extension flags - pub const SHARED_VALIDATE = 0x03; - /// Mask for type of mapping - pub const TYPE = 0x0f; - /// Interpret addr exactly - pub const FIXED = 0x10; - /// don't use a file - pub const ANONYMOUS = if (is_mips) 0x800 else 0x20; - // MAP_ 0x0100 - 0x4000 flags are per architecture - /// populate (prefault) pagetables - pub const POPULATE = if (is_mips) 0x10000 else 0x8000; - /// do not block on IO - pub const NONBLOCK = if (is_mips) 0x20000 else 0x10000; - /// give out an address that is best suited for process/thread stacks - pub const STACK = if (is_mips) 0x40000 else 0x20000; - /// create a huge page mapping - pub const HUGETLB = if (is_mips) 0x80000 else 0x40000; - /// perform synchronous page faults for the mapping - pub const SYNC = 0x80000; - /// MAP_FIXED which doesn't unmap underlying mapping - pub const FIXED_NOREPLACE = 0x100000; - /// For anonymous mmap, memory could be uninitialized - pub const UNINITIALIZED = 0x4000000; +pub const MAP_TYPE = enum(u4) { + SHARED = 0x01, + PRIVATE = 0x02, + SHARED_VALIDATE = 0x03, +}; + +pub const MAP = switch (native_arch) { + .x86_64, .x86 => packed struct(u32) { + TYPE: MAP_TYPE, + FIXED: bool = false, + ANONYMOUS: bool = false, + @"32BIT": bool = false, + _7: u1 = 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, + _21: u5 = 0, + UNINITIALIZED: bool = false, + _: u5 = 0, + }, + .aarch64, .aarch64_be, .arm, .thumb => packed struct(u32) { + TYPE: MAP_TYPE, + 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, + _21: u5 = 0, + UNINITIALIZED: bool = false, + _: u5 = 0, + }, + .riscv64 => packed struct(u32) { + TYPE: MAP_TYPE, + FIXED: bool = false, + ANONYMOUS: bool = false, + _6: u9 = 0, + POPULATE: bool = false, + NONBLOCK: bool = false, + STACK: bool = false, + HUGETLB: bool = false, + SYNC: bool = false, + FIXED_NOREPLACE: bool = false, + _21: u5 = 0, + UNINITIALIZED: bool = false, + _: u5 = 0, + }, + .sparc64 => packed struct(u32) { + TYPE: MAP_TYPE, + FIXED: bool = false, + ANONYMOUS: bool = false, + NORESERVE: bool = false, + _7: u1 = 0, + LOCKED: bool = false, + GROWSDOWN: bool = false, + _10: u1 = 0, + DENYWRITE: bool = false, + EXECUTABLE: bool = false, + _13: u2 = 0, + POPULATE: bool = false, + NONBLOCK: bool = false, + STACK: bool = false, + HUGETLB: bool = false, + SYNC: bool = false, + FIXED_NOREPLACE: bool = false, + _21: u5 = 0, + UNINITIALIZED: bool = false, + _: u5 = 0, + }, + .mips, .mipsel, .mips64, .mips64el => packed struct(u32) { + TYPE: MAP_TYPE, + FIXED: bool = false, + _5: u1 = 0, + @"32BIT": bool = false, + _7: u3 = 0, + NORESERVE: bool = false, + ANONYMOUS: bool = false, + GROWSDOWN: bool = false, + DENYWRITE: bool = false, + EXECUTABLE: bool = false, + LOCKED: bool = false, + POPULATE: bool = false, + NONBLOCK: bool = false, + STACK: bool = false, + HUGETLB: bool = false, + FIXED_NOREPLACE: bool = false, + _21: u5 = 0, + UNINITIALIZED: bool = false, + _: u5 = 0, + }, + .powerpc, .powerpcle, .powerpc64, .powerpc64le => packed struct(u32) { + TYPE: MAP_TYPE, + FIXED: bool = false, + ANONYMOUS: bool = false, + NORESERVE: bool = false, + LOCKED: bool = false, + GROWSDOWN: bool = false, + _9: u2 = 0, + DENYWRITE: bool = false, + EXECUTABLE: bool = false, + _13: u2 = 0, + POPULATE: bool = false, + NONBLOCK: bool = false, + STACK: bool = false, + HUGETLB: bool = false, + SYNC: bool = false, + FIXED_NOREPLACE: bool = false, + _21: u5 = 0, + UNINITIALIZED: bool = false, + _: u5 = 0, + }, + else => @compileError("missing std.os.linux.MAP constants for this architecture"), }; pub const O = struct { diff --git a/lib/std/os/linux/arm-eabi.zig b/lib/std/os/linux/arm-eabi.zig index f4870dccbb..74c381f496 100644 --- a/lib/std/os/linux/arm-eabi.zig +++ b/lib/std/os/linux/arm-eabi.zig @@ -197,19 +197,6 @@ pub const LOCK = struct { pub const NB = 4; }; -pub const MAP = struct { - /// stack-like segment - pub const GROWSDOWN = 0x0100; - /// ETXTBSY - pub const DENYWRITE = 0x0800; - /// mark it as an executable - pub const EXECUTABLE = 0x1000; - /// pages are locked - pub const LOCKED = 0x2000; - /// don't check for reservations - pub const NORESERVE = 0x4000; -}; - pub const VDSO = struct { pub const CGT_SYM = "__vdso_clock_gettime"; pub const CGT_VER = "LINUX_2.6"; diff --git a/lib/std/os/linux/arm64.zig b/lib/std/os/linux/arm64.zig index b87e774306..40dad5656e 100644 --- a/lib/std/os/linux/arm64.zig +++ b/lib/std/os/linux/arm64.zig @@ -179,19 +179,6 @@ pub const LOCK = struct { pub const NB = 4; }; -pub const MAP = struct { - /// stack-like segment - pub const GROWSDOWN = 0x0100; - /// ETXTBSY - pub const DENYWRITE = 0x0800; - /// mark it as an executable - pub const EXECUTABLE = 0x1000; - /// pages are locked - pub const LOCKED = 0x2000; - /// don't check for reservations - pub const NORESERVE = 0x4000; -}; - pub const VDSO = struct { pub const CGT_SYM = "__kernel_clock_gettime"; pub const CGT_VER = "LINUX_2.6.39"; diff --git a/lib/std/os/linux/io_uring.zig b/lib/std/os/linux/io_uring.zig index 17c589574d..77e134feec 100644 --- a/lib/std/os/linux/io_uring.zig +++ b/lib/std/os/linux/io_uring.zig @@ -1344,7 +1344,7 @@ pub const SubmissionQueue = struct { null, size, os.PROT.READ | os.PROT.WRITE, - os.MAP.SHARED | os.MAP.POPULATE, + .{ .TYPE = .SHARED, .POPULATE = true }, fd, linux.IORING_OFF_SQ_RING, ); @@ -1358,7 +1358,7 @@ pub const SubmissionQueue = struct { null, size_sqes, os.PROT.READ | os.PROT.WRITE, - os.MAP.SHARED | os.MAP.POPULATE, + .{ .TYPE = .SHARED, .POPULATE = true }, fd, linux.IORING_OFF_SQES, ); diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig index cfb2d73bfd..17c6c8a150 100644 --- a/lib/std/os/linux/mips.zig +++ b/lib/std/os/linux/mips.zig @@ -271,15 +271,6 @@ pub const LOCK = struct { pub const MMAP2_UNIT = 4096; -pub const MAP = struct { - pub const NORESERVE = 0x0400; - pub const GROWSDOWN = 0x1000; - pub const DENYWRITE = 0x2000; - pub const EXECUTABLE = 0x4000; - pub const LOCKED = 0x8000; - pub const @"32BIT" = 0x40; -}; - pub const VDSO = struct { pub const CGT_SYM = "__kernel_clock_gettime"; pub const CGT_VER = "LINUX_2.6.39"; diff --git a/lib/std/os/linux/mips64.zig b/lib/std/os/linux/mips64.zig index d986110979..09499cbf9f 100644 --- a/lib/std/os/linux/mips64.zig +++ b/lib/std/os/linux/mips64.zig @@ -256,15 +256,6 @@ pub const LOCK = struct { pub const MMAP2_UNIT = 4096; -pub const MAP = struct { - pub const NORESERVE = 0x0400; - pub const GROWSDOWN = 0x1000; - pub const DENYWRITE = 0x2000; - pub const EXECUTABLE = 0x4000; - pub const LOCKED = 0x8000; - pub const @"32BIT" = 0x40; -}; - pub const VDSO = struct { pub const CGT_SYM = "__kernel_clock_gettime"; pub const CGT_VER = "LINUX_2.6.39"; diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig index 87feba3f0a..5f07370489 100644 --- a/lib/std/os/linux/powerpc.zig +++ b/lib/std/os/linux/powerpc.zig @@ -198,19 +198,6 @@ pub const LOCK = struct { pub const NB = 4; }; -pub const MAP = struct { - /// stack-like segment - pub const GROWSDOWN = 0x0100; - /// ETXTBSY - pub const DENYWRITE = 0x0800; - /// mark it as an executable - pub const EXECUTABLE = 0x1000; - /// pages are locked - pub const LOCKED = 0x0080; - /// don't check for reservations - pub const NORESERVE = 0x0040; -}; - pub const VDSO = struct { pub const CGT_SYM = "__kernel_clock_gettime"; pub const CGT_VER = "LINUX_2.6.15"; diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig index dc142abc4f..99e52fb5ad 100644 --- a/lib/std/os/linux/powerpc64.zig +++ b/lib/std/os/linux/powerpc64.zig @@ -198,19 +198,6 @@ pub const LOCK = struct { pub const NB = 4; }; -pub const MAP = struct { - /// stack-like segment - pub const GROWSDOWN = 0x0100; - /// ETXTBSY - pub const DENYWRITE = 0x0800; - /// mark it as an executable - pub const EXECUTABLE = 0x1000; - /// pages are locked - pub const LOCKED = 0x0080; - /// don't check for reservations - pub const NORESERVE = 0x0040; -}; - pub const VDSO = struct { pub const CGT_SYM = "__kernel_clock_gettime"; pub const CGT_VER = "LINUX_2.6.15"; diff --git a/lib/std/os/linux/riscv64.zig b/lib/std/os/linux/riscv64.zig index 473cab7b31..45821ddefa 100644 --- a/lib/std/os/linux/riscv64.zig +++ b/lib/std/os/linux/riscv64.zig @@ -246,4 +246,3 @@ pub const Stat = extern struct { pub const Elf_Symndx = u32; pub const VDSO = struct {}; -pub const MAP = struct {}; diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig index 293f8b6ce2..ef4e1281b5 100644 --- a/lib/std/os/linux/sparc64.zig +++ b/lib/std/os/linux/sparc64.zig @@ -248,19 +248,6 @@ pub const LOCK = struct { pub const UN = 8; }; -pub const MAP = struct { - /// stack-like segment - pub const GROWSDOWN = 0x0200; - /// ETXTBSY - pub const DENYWRITE = 0x0800; - /// mark it as an executable - pub const EXECUTABLE = 0x1000; - /// pages are locked - pub const LOCKED = 0x0100; - /// don't check for reservations - pub const NORESERVE = 0x0040; -}; - pub const VDSO = struct { pub const CGT_SYM = "__vdso_clock_gettime"; pub const CGT_VER = "LINUX_2.6"; diff --git a/lib/std/os/linux/tls.zig b/lib/std/os/linux/tls.zig index dfd5200d45..6973d1ea2e 100644 --- a/lib/std/os/linux/tls.zig +++ b/lib/std/os/linux/tls.zig @@ -324,7 +324,7 @@ pub fn initStaticTLS(phdrs: []elf.Phdr) void { null, tls_image.alloc_size + tls_image.alloc_align - 1, os.PROT.READ | os.PROT.WRITE, - os.MAP.PRIVATE | os.MAP.ANONYMOUS, + .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, -1, 0, ) catch os.abort(); diff --git a/lib/std/os/linux/x86.zig b/lib/std/os/linux/x86.zig index 721fdecb82..a6be4ac380 100644 --- a/lib/std/os/linux/x86.zig +++ b/lib/std/os/linux/x86.zig @@ -211,15 +211,6 @@ pub const LOCK = struct { pub const UN = 8; }; -pub const MAP = struct { - pub const NORESERVE = 0x4000; - pub const GROWSDOWN = 0x0100; - pub const DENYWRITE = 0x0800; - pub const EXECUTABLE = 0x1000; - pub const LOCKED = 0x2000; - pub const @"32BIT" = 0x40; -}; - pub const MMAP2_UNIT = 4096; pub const VDSO = struct { diff --git a/lib/std/os/linux/x86_64.zig b/lib/std/os/linux/x86_64.zig index ce8e1133ae..6d4ab11abb 100644 --- a/lib/std/os/linux/x86_64.zig +++ b/lib/std/os/linux/x86_64.zig @@ -177,21 +177,6 @@ pub const F = struct { pub const UNLCK = 2; }; -pub const MAP = struct { - /// only give out 32bit addresses - pub const @"32BIT" = 0x40; - /// stack-like segment - pub const GROWSDOWN = 0x0100; - /// ETXTBSY - pub const DENYWRITE = 0x0800; - /// mark it as an executable - pub const EXECUTABLE = 0x1000; - /// pages are locked - pub const LOCKED = 0x2000; - /// don't check for reservations - pub const NORESERVE = 0x4000; -}; - pub const VDSO = struct { pub const CGT_SYM = "__vdso_clock_gettime"; pub const CGT_VER = "LINUX_2.6"; diff --git a/lib/std/os/test.zig b/lib/std/os/test.zig index c74c0aefc4..3a170d6aec 100644 --- a/lib/std/os/test.zig +++ b/lib/std/os/test.zig @@ -576,7 +576,7 @@ test "mmap" { null, 1234, os.PROT.READ | os.PROT.WRITE, - os.MAP.ANONYMOUS | os.MAP.PRIVATE, + .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, -1, 0, ); @@ -618,7 +618,7 @@ test "mmap" { null, alloc_size, os.PROT.READ, - os.MAP.PRIVATE, + .{ .TYPE = .PRIVATE }, file.handle, 0, ); @@ -642,7 +642,7 @@ test "mmap" { null, alloc_size / 2, os.PROT.READ, - os.MAP.PRIVATE, + .{ .TYPE = .PRIVATE }, file.handle, alloc_size / 2, ); |
