diff options
| author | Mattias Andrée <m@maandree.se> | 2026-05-10 13:37:34 +0200 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-05-10 13:37:34 +0200 |
| commit | b7e8928005079171c7595fd336a76f655daed48a (patch) | |
| tree | 9fa87ba8ada6cc52e343c32789ff7225d817e4fa /libtest/mmap.c | |
| parent | Misc (diff) | |
| download | librecrypt-b7e8928005079171c7595fd336a76f655daed48a.tar.gz librecrypt-b7e8928005079171c7595fd336a76f655daed48a.tar.bz2 librecrypt-b7e8928005079171c7595fd336a76f655daed48a.tar.xz | |
Improvements to libtest
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to '')
| -rw-r--r-- | libtest/mmap.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/libtest/mmap.c b/libtest/mmap.c new file mode 100644 index 0000000..c12594f --- /dev/null +++ b/libtest/mmap.c @@ -0,0 +1,72 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" +#ifndef TEST + +#include <sys/syscall.h> + + +void * +libtest_real_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t off) +{ + size_t pagesize = libtest_get_pagesize(); + + if (off < 0 || off % (off_t)pagesize) + goto einval; + off /= (off_t)pagesize; + +#if defined(__x86_64__) && defined(__ILP32__) /* x32 */ + if (off > LLONG_MAX) + goto einval; +#else + if (off > LONG_MAX) + goto einval; +#endif + +#ifdef SYS_mmap2 + assert(pagesize == 4096u); + return (void *)syscall(SYS_mmap2, addr, len, prot, flags, fd, off); +#else + return (void *)syscall(SYS_mmap, addr, len, prot, flags, fd, off); +#endif + +einval: + errno = EINVAL; + return MAP_FAILED; +} + + +int +libtest_real_munmap(void *addr, size_t len) +{ + return syscall(SYS_munmap, addr, len); +} + + +void * +libtest_real_mremap(void *old_addr, size_t old_len, size_t new_len, int flags, ...) +{ + va_list args; + void *new_addr = NULL; + + if (flags & MREMAP_FIXED) { + va_start(args, flags); + new_addr = va_arg(args, void *); + va_end(args); + } + + return (void *)syscall(SYS_mremap, old_addr, old_len, new_len, flags, new_addr); +} + + +#else + + +CONST int +main(void) +{ + /* TODO maybe test */ + return 0; +} + + +#endif |
