1
#include <apheleia/syscall.h>
2
#include <arch/sys.h>
3
#include <errno.h>
4
#include <sys/mman.h>
5
#include <unistd.h>
6
7
void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset) {
8
mmap_args_t args = {
9
.addr = addr,
10
.len = len,
11
.prot = prot,
12
.flags = flags,
13
.fd = fd,
14
.offset = offset,
15
};
16
17
long ret = syscall1(SYS_MMAP, (uintptr_t)&args);
18
if (ret < 0) {
19
errno = (int)-ret;
20
return MAP_FAILED;
21
}22
return (void *)ret;
23
}24
25
int mprotect(void *addr, size_t len, int prot) {
26
return (int)__SYSCALL_ERRNO(syscall3(SYS_MPROTECT, (uintptr_t)addr, (uintptr_t)len, (uintptr_t)prot));
27
}28
29
int munmap(void *addr, size_t len) {
30
return (int)__SYSCALL_ERRNO(syscall2(SYS_MUNMAP, (uintptr_t)addr, (uintptr_t)len));
31
}