diff --git a/core/mem/virtual/virtual_posix.odin b/core/mem/virtual/virtual_posix.odin index 105849774..c3d6a9095 100644 --- a/core/mem/virtual/virtual_posix.odin +++ b/core/mem/virtual/virtual_posix.odin @@ -6,17 +6,13 @@ import "core:sys/posix" // Define non-posix needed flags: when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD { - MAP_ANONYMOUS :: 0x1000 /* allocated from memory, swap space */ - - MADV_FREE :: 5 /* pages unneeded, discard contents */ + MADV_FREE :: 5 /* pages unneeded, discard contents */ } else when ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD { - MAP_ANONYMOUS :: 0x1000 - - MADV_FREE :: 6 + MADV_FREE :: 6 } _reserve :: proc "contextless" (size: uint) -> (data: []byte, err: Allocator_Error) { - flags := posix.Map_Flags{ .PRIVATE } + transmute(posix.Map_Flags)i32(MAP_ANONYMOUS) + flags := posix.Map_Flags{ .ANONYMOUS, .PRIVATE } result := posix.mmap(nil, size, {}, flags) if result == posix.MAP_FAILED { return nil, .Out_Of_Memory diff --git a/core/sys/posix/sys_mman.odin b/core/sys/posix/sys_mman.odin index 9e2939a05..0594672ae 100644 --- a/core/sys/posix/sys_mman.odin +++ b/core/sys/posix/sys_mman.odin @@ -116,12 +116,14 @@ Prot_Flag_Bits :: enum c.int { Prot_Flags :: bit_set[Prot_Flag_Bits; c.int] Map_Flag_Bits :: enum c.int { + // Map anonymous memory. + ANONYMOUS = log2(MAP_ANONYMOUS), // Interpret addr exactly. - FIXED = log2(MAP_FIXED), + FIXED = log2(MAP_FIXED), // Changes are private. - PRIVATE = log2(MAP_PRIVATE), + PRIVATE = log2(MAP_PRIVATE), // Changes are shared. - SHARED = log2(MAP_SHARED), + SHARED = log2(MAP_SHARED), } Map_Flags :: bit_set[Map_Flag_Bits; c.int] @@ -171,9 +173,10 @@ when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS PROT_READ :: 0x01 PROT_WRITE :: 0x02 - MAP_FIXED :: 0x0010 - MAP_PRIVATE :: 0x0002 - MAP_SHARED :: 0x0001 + MAP_FIXED :: 0x0010 + MAP_PRIVATE :: 0x0002 + MAP_SHARED :: 0x0001 + MAP_ANONYMOUS :: 0x0020 when ODIN_OS == .Linux else 0x1000 when ODIN_OS == .Darwin || ODIN_OS == .Linux { MS_INVALIDATE :: 0x0002 @@ -207,9 +210,10 @@ when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS PROT_READ :: 0x01 PROT_WRITE :: 0x02 - MAP_FIXED :: 0x0010 - MAP_PRIVATE :: 0x0002 - MAP_SHARED :: 0x0001 + MAP_FIXED :: 0x0010 + MAP_PRIVATE :: 0x0002 + MAP_SHARED :: 0x0001 + MAP_ANONYMOUS :: 0x1000 MS_ASYNC :: 0x0001 MS_INVALIDATE :: 0x0002