mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
sys/posix: add MAP_ANONYMOUS
This commit is contained in:
@@ -6,17 +6,13 @@ import "core:sys/posix"
|
|||||||
|
|
||||||
// Define non-posix needed flags:
|
// Define non-posix needed flags:
|
||||||
when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD {
|
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 {
|
} 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) {
|
_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)
|
result := posix.mmap(nil, size, {}, flags)
|
||||||
if result == posix.MAP_FAILED {
|
if result == posix.MAP_FAILED {
|
||||||
return nil, .Out_Of_Memory
|
return nil, .Out_Of_Memory
|
||||||
|
|||||||
@@ -116,6 +116,8 @@ Prot_Flag_Bits :: enum c.int {
|
|||||||
Prot_Flags :: bit_set[Prot_Flag_Bits; c.int]
|
Prot_Flags :: bit_set[Prot_Flag_Bits; c.int]
|
||||||
|
|
||||||
Map_Flag_Bits :: enum c.int {
|
Map_Flag_Bits :: enum c.int {
|
||||||
|
// Map anonymous memory.
|
||||||
|
ANONYMOUS = log2(MAP_ANONYMOUS),
|
||||||
// Interpret addr exactly.
|
// Interpret addr exactly.
|
||||||
FIXED = log2(MAP_FIXED),
|
FIXED = log2(MAP_FIXED),
|
||||||
// Changes are private.
|
// Changes are private.
|
||||||
@@ -174,6 +176,7 @@ when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS
|
|||||||
MAP_FIXED :: 0x0010
|
MAP_FIXED :: 0x0010
|
||||||
MAP_PRIVATE :: 0x0002
|
MAP_PRIVATE :: 0x0002
|
||||||
MAP_SHARED :: 0x0001
|
MAP_SHARED :: 0x0001
|
||||||
|
MAP_ANONYMOUS :: 0x0020 when ODIN_OS == .Linux else 0x1000
|
||||||
|
|
||||||
when ODIN_OS == .Darwin || ODIN_OS == .Linux {
|
when ODIN_OS == .Darwin || ODIN_OS == .Linux {
|
||||||
MS_INVALIDATE :: 0x0002
|
MS_INVALIDATE :: 0x0002
|
||||||
@@ -210,6 +213,7 @@ when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS
|
|||||||
MAP_FIXED :: 0x0010
|
MAP_FIXED :: 0x0010
|
||||||
MAP_PRIVATE :: 0x0002
|
MAP_PRIVATE :: 0x0002
|
||||||
MAP_SHARED :: 0x0001
|
MAP_SHARED :: 0x0001
|
||||||
|
MAP_ANONYMOUS :: 0x1000
|
||||||
|
|
||||||
MS_ASYNC :: 0x0001
|
MS_ASYNC :: 0x0001
|
||||||
MS_INVALIDATE :: 0x0002
|
MS_INVALIDATE :: 0x0002
|
||||||
|
|||||||
Reference in New Issue
Block a user