From b7e8928005079171c7595fd336a76f655daed48a Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 10 May 2026 13:37:34 +0200 Subject: Improvements to libtest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libtest/mmap.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 libtest/mmap.c (limited to 'libtest/mmap.c') 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 + + +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 -- cgit v1.2.3-70-g09d2