|
|
@@ -0,0 +1,137 @@
|
|
|
+From 3d975fa52b82e390ecbb0252739ee3fae64266c2 Mon Sep 17 00:00:00 2001
|
|
|
+From: Waldemar Brodkorb <wbx@openadk.org>
|
|
|
+Date: Wed, 14 Aug 2024 17:28:19 +0200
|
|
|
+Subject: [PATCH 1/2] add process_vm_{read,write}v syscall wrapper from glibc
|
|
|
+
|
|
|
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
|
|
+---
|
|
|
+ include/sys/uio.h | 19 +++++++++++
|
|
|
+ libc/sysdeps/linux/common/Makefile.in | 2 ++
|
|
|
+ libc/sysdeps/linux/common/process_vm_readv.c | 32 +++++++++++++++++++
|
|
|
+ libc/sysdeps/linux/common/process_vm_writev.c | 32 +++++++++++++++++++
|
|
|
+ 4 files changed, 85 insertions(+)
|
|
|
+ create mode 100644 libc/sysdeps/linux/common/process_vm_readv.c
|
|
|
+ create mode 100644 libc/sysdeps/linux/common/process_vm_writev.c
|
|
|
+
|
|
|
+diff --git a/include/sys/uio.h b/include/sys/uio.h
|
|
|
+index 330426fec..9e9708c0c 100644
|
|
|
+--- a/include/sys/uio.h
|
|
|
++++ b/include/sys/uio.h
|
|
|
+@@ -74,6 +74,25 @@ extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count,
|
|
|
+ __off64_t __offset) __wur;
|
|
|
+ #endif /* Use misc. */
|
|
|
+
|
|
|
++#ifdef __USE_GNU
|
|
|
++/* Read from another process' address space. */
|
|
|
++extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec,
|
|
|
++ unsigned long int __liovcnt,
|
|
|
++ const struct iovec *__rvec,
|
|
|
++ unsigned long int __riovcnt,
|
|
|
++ unsigned long int __flags)
|
|
|
++ __THROW;
|
|
|
++
|
|
|
++/* Write to another process' address space. */
|
|
|
++extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
|
|
|
++ unsigned long int __liovcnt,
|
|
|
++ const struct iovec *__rvec,
|
|
|
++ unsigned long int __riovcnt,
|
|
|
++ unsigned long int __flags)
|
|
|
++ __THROW;
|
|
|
++
|
|
|
++#endif
|
|
|
++
|
|
|
+ __END_DECLS
|
|
|
+
|
|
|
+ #endif /* sys/uio.h */
|
|
|
+diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in
|
|
|
+index 83be2691e..e0b280c33 100644
|
|
|
+--- a/libc/sysdeps/linux/common/Makefile.in
|
|
|
++++ b/libc/sysdeps/linux/common/Makefile.in
|
|
|
+@@ -40,6 +40,8 @@ CSRC-$(UCLIBC_LINUX_SPECIFIC) += \
|
|
|
+ ppoll.c \
|
|
|
+ prctl.c \
|
|
|
+ prlimit.c \
|
|
|
++ process_vm_readv.c \
|
|
|
++ process_vm_writev.c \
|
|
|
+ readahead.c \
|
|
|
+ reboot.c \
|
|
|
+ remap_file_pages.c \
|
|
|
+diff --git a/libc/sysdeps/linux/common/process_vm_readv.c b/libc/sysdeps/linux/common/process_vm_readv.c
|
|
|
+new file mode 100644
|
|
|
+index 000000000..b69c1c97a
|
|
|
+--- /dev/null
|
|
|
++++ b/libc/sysdeps/linux/common/process_vm_readv.c
|
|
|
+@@ -0,0 +1,32 @@
|
|
|
++/* process_vm_readv - Linux specific syscall.
|
|
|
++ Copyright (C) 2020-2024 Free Software Foundation, Inc.
|
|
|
++
|
|
|
++ The GNU C Library is free software; you can redistribute it and/or
|
|
|
++ modify it under the terms of the GNU Lesser General Public
|
|
|
++ License as published by the Free Software Foundation; either
|
|
|
++ version 2.1 of the License, or (at your option) any later version.
|
|
|
++
|
|
|
++ The GNU C Library is distributed in the hope that it will be useful,
|
|
|
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
++ Lesser General Public License for more details.
|
|
|
++
|
|
|
++ You should have received a copy of the GNU Lesser General Public
|
|
|
++ License along with the GNU C Library; if not, see
|
|
|
++ <https://www.gnu.org/licenses/>. */
|
|
|
++
|
|
|
++#include <sys/uio.h>
|
|
|
++#include <sys/syscall.h>
|
|
|
++#include <unistd.h>
|
|
|
++
|
|
|
++#ifdef __NR_process_vm_readv
|
|
|
++ssize_t
|
|
|
++process_vm_readv (pid_t pid, const struct iovec *local_iov,
|
|
|
++ unsigned long int liovcnt,
|
|
|
++ const struct iovec *remote_iov,
|
|
|
++ unsigned long int riovcnt, unsigned long int flags)
|
|
|
++{
|
|
|
++ return INLINE_SYSCALL (process_vm_readv, 6, pid, local_iov,
|
|
|
++ liovcnt, remote_iov, riovcnt, flags);
|
|
|
++}
|
|
|
++#endif
|
|
|
+diff --git a/libc/sysdeps/linux/common/process_vm_writev.c b/libc/sysdeps/linux/common/process_vm_writev.c
|
|
|
+new file mode 100644
|
|
|
+index 000000000..e22817a8d
|
|
|
+--- /dev/null
|
|
|
++++ b/libc/sysdeps/linux/common/process_vm_writev.c
|
|
|
+@@ -0,0 +1,32 @@
|
|
|
++/* process_vm_writev - Linux specific syscall.
|
|
|
++ Copyright (C) 2020-2024 Free Software Foundation, Inc.
|
|
|
++
|
|
|
++ The GNU C Library is free software; you can redistribute it and/or
|
|
|
++ modify it under the terms of the GNU Lesser General Public
|
|
|
++ License as published by the Free Software Foundation; either
|
|
|
++ version 2.1 of the License, or (at your option) any later version.
|
|
|
++
|
|
|
++ The GNU C Library is distributed in the hope that it will be useful,
|
|
|
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
++ Lesser General Public License for more details.
|
|
|
++
|
|
|
++ You should have received a copy of the GNU Lesser General Public
|
|
|
++ License along with the GNU C Library; if not, see
|
|
|
++ <https://www.gnu.org/licenses/>. */
|
|
|
++
|
|
|
++#include <sys/uio.h>
|
|
|
++#include <sys/syscall.h>
|
|
|
++#include <unistd.h>
|
|
|
++
|
|
|
++#ifdef __NR_process_vm_writev
|
|
|
++ssize_t
|
|
|
++process_vm_writev (pid_t pid, const struct iovec *local_iov,
|
|
|
++ unsigned long int liovcnt,
|
|
|
++ const struct iovec *remote_iov,
|
|
|
++ unsigned long int riovcnt, unsigned long int flags)
|
|
|
++{
|
|
|
++ return INLINE_SYSCALL (process_vm_writev, 6, pid, local_iov,
|
|
|
++ liovcnt, remote_iov, riovcnt, flags);
|
|
|
++}
|
|
|
++#endif
|
|
|
+--
|
|
|
+2.30.2
|
|
|
+
|