mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +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,12 +116,14 @@ 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.
|
||||||
PRIVATE = log2(MAP_PRIVATE),
|
PRIVATE = log2(MAP_PRIVATE),
|
||||||
// Changes are shared.
|
// Changes are shared.
|
||||||
SHARED = log2(MAP_SHARED),
|
SHARED = log2(MAP_SHARED),
|
||||||
}
|
}
|
||||||
Map_Flags :: bit_set[Map_Flag_Bits; c.int]
|
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_READ :: 0x01
|
||||||
PROT_WRITE :: 0x02
|
PROT_WRITE :: 0x02
|
||||||
|
|
||||||
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
|
||||||
@@ -207,9 +210,10 @@ when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS
|
|||||||
PROT_READ :: 0x01
|
PROT_READ :: 0x01
|
||||||
PROT_WRITE :: 0x02
|
PROT_WRITE :: 0x02
|
||||||
|
|
||||||
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