37 lines
1.1 KiB
C
37 lines
1.1 KiB
C
// vim:fileencoding=utf-8:foldmethod=marker
|
|
|
|
#include "../../../common/aliases/aliases.h"
|
|
#include "../../../common/platform/platform.h"
|
|
|
|
#ifdef WAPP_PLATFORM_POSIX
|
|
|
|
#include "mem_os_posix.h"
|
|
#include "../mem_os_ops.h"
|
|
#include <sys/mman.h>
|
|
|
|
wapp_intern const i32 access_types[] = {
|
|
[WAPP_MEM_ACCESS_NONE] = PROT_NONE,
|
|
[WAPP_MEM_ACCESS_READ_ONLY] = PROT_READ,
|
|
[WAPP_MEM_ACCESS_EXEC_ONLY] = PROT_EXEC,
|
|
[WAPP_MEM_ACCESS_READ_WRITE] = PROT_READ | PROT_WRITE,
|
|
[WAPP_MEM_ACCESS_READ_EXEC] = PROT_READ | PROT_EXEC,
|
|
[WAPP_MEM_ACCESS_READ_WRITE_EXEC] = PROT_READ | PROT_WRITE | PROT_EXEC,
|
|
};
|
|
|
|
void *os_mem_allocate(void *addr, u64 size, MemAccess access, MemAllocFlags flags, MemInitType type) {
|
|
(void)type;
|
|
i32 alloc_flags = flags | MAP_ANON | MAP_PRIVATE;
|
|
|
|
#if defined(WAPP_PLATFORM_LINUX) || defined(WAPP_PLATFORM_GNU) || defined(WAPP_PLATFORM_NET_BSD)
|
|
alloc_flags |= MAP_NORESERVE;
|
|
#endif
|
|
|
|
return mmap(addr, size, access_types[access], alloc_flags, -1, 0);
|
|
}
|
|
|
|
void os_mem_free(void *ptr, u64 size) {
|
|
munmap(ptr, size);
|
|
}
|
|
|
|
#endif // !WAPP_PLATFORM_POSIX
|