Browse Source

Merge pull request #1806 from jasonKercher/virtual_linux_fix

fix mmap call in virtual_linux.odin
gingerBill 3 years ago
parent
commit
337780497d
1 changed files with 4 additions and 5 deletions
  1. 4 5
      core/mem/virtual/virtual_linux.odin

+ 4 - 5
core/mem/virtual/virtual_linux.odin

@@ -37,9 +37,9 @@ MADV_WIPEONFORK  :: 18
 MADV_KEEPONFORK  :: 19
 MADV_KEEPONFORK  :: 19
 MADV_HWPOISON    :: 100
 MADV_HWPOISON    :: 100
 
 
-mmap :: proc "contextless" (addr: rawptr, length: uint, prot: c.int, flags: c.int, fd: c.int, offset: uintptr) -> rawptr {
+mmap :: proc "contextless" (addr: rawptr, length: uint, prot: c.int, flags: c.int, fd: c.int, offset: uintptr) -> int {
 	res := intrinsics.syscall(unix.SYS_mmap, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), offset)
 	res := intrinsics.syscall(unix.SYS_mmap, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), offset)
-	return rawptr(res)
+	return int(res)
 }
 }
 
 
 munmap :: proc "contextless" (addr: rawptr, length: uint) -> c.int {
 munmap :: proc "contextless" (addr: rawptr, length: uint) -> c.int {
@@ -59,12 +59,11 @@ madvise :: proc "contextless" (addr: rawptr, length: uint, advice: c.int) -> c.i
 
 
 
 
 _reserve :: proc "contextless" (size: uint) -> (data: []byte, err: Allocator_Error) {
 _reserve :: proc "contextless" (size: uint) -> (data: []byte, err: Allocator_Error) {
-	MAP_FAILED := rawptr(~uintptr(0))
 	result := mmap(nil, size, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
 	result := mmap(nil, size, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
-	if result == MAP_FAILED {
+	if result < 0 && result > -4096 {
 		return nil, .Out_Of_Memory
 		return nil, .Out_Of_Memory
 	}
 	}
-	return ([^]byte)(result)[:size], nil
+	return ([^]byte)(uintptr(result))[:size], nil
 }
 }
 
 
 _commit :: proc "contextless" (data: rawptr, size: uint) -> Allocator_Error {
 _commit :: proc "contextless" (data: rawptr, size: uint) -> Allocator_Error {