| /* SPDX-License-Identifier: LGPL-2.1 OR MIT */ | |
| /* | |
| * mm definition for NOLIBC | |
| * Copyright (C) 2017-2021 Willy Tarreau <w@1wt.eu> | |
| */ | |
| /* make sure to include all global symbols */ | |
| #include "../nolibc.h" | |
| #ifndef _NOLIBC_SYS_MMAN_H | |
| #define _NOLIBC_SYS_MMAN_H | |
| #include "../arch.h" | |
| #include "../sys.h" | |
| #ifndef _sys_mmap | |
| static __attribute__((unused)) | |
| void *_sys_mmap(void *addr, size_t length, int prot, int flags, int fd, | |
| off_t offset) | |
| { | |
| int n; | |
| #if defined(__NR_mmap2) | |
| n = __NR_mmap2; | |
| offset >>= 12; | |
| #else | |
| n = __NR_mmap; | |
| #endif | |
| return (void *)(unsigned long)__nolibc_syscall6(n, addr, length, prot, flags, fd, offset); | |
| } | |
| #endif | |
| static __attribute__((unused)) | |
| void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) | |
| { | |
| void *ret = _sys_mmap(addr, length, prot, flags, fd, offset); | |
| if ((unsigned long)ret >= -4095UL) { | |
| SET_ERRNO(-(long)ret); | |
| ret = MAP_FAILED; | |
| } | |
| return ret; | |
| } | |
| static __attribute__((unused)) | |
| void *_sys_mremap(void *old_address, size_t old_size, size_t new_size, int flags, void *new_address) | |
| { | |
| return (void *)(unsigned long)__nolibc_syscall5(__NR_mremap, old_address, old_size, | |
| new_size, flags, new_address); | |
| } | |
| static __attribute__((unused)) | |
| void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, void *new_address) | |
| { | |
| void *ret = _sys_mremap(old_address, old_size, new_size, flags, new_address); | |
| if ((unsigned long)ret >= -4095UL) { | |
| SET_ERRNO(-(long)ret); | |
| ret = MAP_FAILED; | |
| } | |
| return ret; | |
| } | |
| static __attribute__((unused)) | |
| int _sys_munmap(void *addr, size_t length) | |
| { | |
| return __nolibc_syscall2(__NR_munmap, addr, length); | |
| } | |
| static __attribute__((unused)) | |
| int munmap(void *addr, size_t length) | |
| { | |
| return __sysret(_sys_munmap(addr, length)); | |
| } | |
| #endif /* _NOLIBC_SYS_MMAN_H */ |