Luna/libc/src/sys/mman.cpp
apio 08c888eaae
All checks were successful
continuous-integration/drone/push Build is passing
kernel+libc: Remove (de)allocate_memory and replace it with POSIX mmap
2023-03-14 20:43:15 +01:00

36 lines
905 B
C++

#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* mmap(void* addr, size_t len, int prot, int flags, int, off_t)
{
long rc = syscall(SYS_mmap, addr, len, prot, flags);
__errno_return(rc, void*);
}
int munmap(void* addr, size_t len)
{
long rc = syscall(SYS_munmap, addr, len);
__errno_return(rc, int);
}
}
Result<void*> allocate_pages_impl(usize count)
{
long rc = syscall(SYS_mmap, nullptr, count * PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS);
if (rc < 0) { return err((int)-rc); }
return (void*)rc;
}
Result<void> release_pages_impl(void* address, usize count)
{
long rc = syscall(SYS_munmap, address, count * PAGE_SIZE);
if (rc < 0) { return err((int)-rc); }
return {};
}