libsel4muslcsys: Implement sys_write wrapper This wraps sys_writev the same way that sys_read is implemented.
diff --git a/libsel4muslcsys/src/sys_io.c b/libsel4muslcsys/src/sys_io.c index bd94f4e..4544371 100644 --- a/libsel4muslcsys/src/sys_io.c +++ b/libsel4muslcsys/src/sys_io.c
@@ -326,6 +326,17 @@ return ret; } +long sys_write(va_list ap) +{ + + int fd = va_arg(ap, int); + void *buf = va_arg(ap, void *); + size_t count = va_arg(ap, size_t); + /* construct an iovec and call writev */ + struct iovec iov = {.iov_base = buf, .iov_len = count }; + return writev(fd, &iov, 1); +} + long sys_readv(va_list ap) { int fd = va_arg(ap, int);
diff --git a/libsel4muslcsys/src/syscalls.h b/libsel4muslcsys/src/syscalls.h index 1761c56..9101f8d 100644 --- a/libsel4muslcsys/src/syscalls.h +++ b/libsel4muslcsys/src/syscalls.h
@@ -39,6 +39,7 @@ long sys_mmap2(va_list ap); long sys_mmap(va_list ap); long sys_mremap(va_list ap); +long sys_write(va_list ap); long sys_writev(va_list ap); long sys_madvise(va_list ap);
diff --git a/libsel4muslcsys/src/vsyscall.c b/libsel4muslcsys/src/vsyscall.c index 666e5ad..021948b 100644 --- a/libsel4muslcsys/src/vsyscall.c +++ b/libsel4muslcsys/src/vsyscall.c
@@ -120,6 +120,9 @@ #endif [__NR_set_tid_address] = boot_set_tid_address, [__NR_writev] = boot_sys_writev, + /* We don't need a boot_sys_write variant as this implementation wraps + * whatever __NR_writev is set to. */ + [__NR_write] = sys_write, [__NR_sched_yield] = sys_sched_yield, [__NR_exit] = sys_exit, [__NR_rt_sigprocmask] = sys_rt_sigprocmask,