Luna/libc/src/sys/mman.cpp

36 lines
897 B
C++
Raw Normal View History

#define _LUNA_SYSTEM_ERROR_EXTENSIONS
#include <bits/errno-return.h>
#include <luna/Heap.h>
#include <sys/mman.h>
#include <sys/syscall.h>
#include <unistd.h>
extern "C"
{
void* allocate_memory(size_t size, int flags)
{
long rc = syscall(SYS_allocate_memory, size, flags);
__errno_return(rc, void*);
}
int deallocate_memory(void* address, size_t size)
{
long rc = syscall(SYS_deallocate_memory, address, size);
__errno_return(rc, int);
}
}
Result<void*> allocate_pages_impl(usize count)
{
long rc = syscall(SYS_allocate_memory, count * PAGE_SIZE, PROT_READ | PROT_WRITE);
if (rc < 0) { return err((int)-rc); }
return (void*)rc;
}
Result<void> release_pages_impl(void* address, usize count)
{
long rc = syscall(SYS_deallocate_memory, address, count * PAGE_SIZE);
if (rc < 0) { return err((int)-rc); }
return {};
}