git.cappig.dev / apheleiaOS.git master

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
}