Luna/libc/src/sys/mman.cpp
apio 0fad179485
All checks were successful
continuous-integration/drone/push Build is passing
apps+libc+libos: Remove _LUNA_SYSTEM_ERROR_EXTENSIONS and reorder headers
libluna/libos headers can now go after errno.h, so there's no reason to keep them separate.
2023-05-02 10:51:53 +02:00

35 lines
867 B
C++

#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 {};
}