|
@@ -1,137 +0,0 @@
|
|
-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
|
|
|
|
-
|
|
|