[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 61/74] linux-user: Split out rt_sigtimedwait
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v7 61/74] linux-user: Split out rt_sigtimedwait |
Date: |
Sun, 19 May 2019 13:37:13 -0700 |
Signed-off-by: Richard Henderson <address@hidden>
---
linux-user/syscall-defs.h | 1 +
linux-user/syscall-sig.inc.c | 37 ++++++++++++++++++++++++++++++++++++
linux-user/syscall.c | 36 -----------------------------------
linux-user/strace.list | 3 ---
4 files changed, 38 insertions(+), 39 deletions(-)
diff --git a/linux-user/syscall-defs.h b/linux-user/syscall-defs.h
index 2b930f5599..24289ed413 100644
--- a/linux-user/syscall-defs.h
+++ b/linux-user/syscall-defs.h
@@ -197,6 +197,7 @@ SYSCALL_DEF(rt_sigaction, ARG_SIGNAL, ARG_PTR, ARG_PTR,
ARG_DEC);
SYSCALL_DEF(rt_sigpending, ARG_PTR, ARG_DEC);
SYSCALL_DEF(rt_sigprocmask, ARG_SIGPROCMASKHOW, ARG_PTR, ARG_PTR, ARG_DEC);
SYSCALL_DEF(rt_sigsuspend, ARG_PTR, ARG_DEC);
+SYSCALL_DEF(rt_sigtimedwait, ARG_PTR, ARG_PTR, ARG_PTR, ARG_DEC);
#if !defined(SYSCALL_TABLE) || defined(TARGET_NR_semctl)
SYSCALL_DEF(semctl, ARG_DEC, ARG_DEC, ARG_DEC, ARG_HEX);
#endif
diff --git a/linux-user/syscall-sig.inc.c b/linux-user/syscall-sig.inc.c
index 23ea14e2a6..5f2c0ba499 100644
--- a/linux-user/syscall-sig.inc.c
+++ b/linux-user/syscall-sig.inc.c
@@ -215,6 +215,43 @@ SYSCALL_IMPL(rt_sigsuspend)
return ret;
}
+SYSCALL_IMPL(rt_sigtimedwait)
+{
+ sigset_t set;
+ struct timespec uts, *puts = NULL;
+ siginfo_t uinfo;
+ abi_long ret;
+ void *p;
+
+ if (arg4 != sizeof(target_sigset_t)) {
+ return -TARGET_EINVAL;
+ }
+ p = lock_user(VERIFY_READ, arg1, sizeof(target_sigset_t), 1);
+ if (!p) {
+ return -TARGET_EFAULT;
+ }
+ target_to_host_sigset(&set, p);
+ unlock_user(p, arg1, 0);
+ if (arg3) {
+ puts = &uts;
+ target_to_host_timespec(puts, arg3);
+ }
+
+ ret = get_errno(safe_rt_sigtimedwait(&set, &uinfo, puts, SIGSET_T_SIZE));
+ if (!is_error(ret)) {
+ if (arg2) {
+ p = lock_user(VERIFY_WRITE, arg2, sizeof(target_siginfo_t), 0);
+ if (!p) {
+ return -TARGET_EFAULT;
+ }
+ host_to_target_siginfo(p, &uinfo);
+ unlock_user(p, arg2, sizeof(target_siginfo_t));
+ }
+ ret = host_to_target_signal(ret);
+ }
+ return ret;
+}
+
#ifdef TARGET_NR_sigaction
SYSCALL_IMPL(sigaction)
{
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 00f4ba8753..8a05d3e32a 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4240,42 +4240,6 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
void *p;
switch(num) {
- case TARGET_NR_rt_sigtimedwait:
- {
- sigset_t set;
- struct timespec uts, *puts;
- siginfo_t uinfo;
-
- if (arg4 != sizeof(target_sigset_t)) {
- return -TARGET_EINVAL;
- }
-
- if (!(p = lock_user(VERIFY_READ, arg1, sizeof(target_sigset_t),
1)))
- return -TARGET_EFAULT;
- target_to_host_sigset(&set, p);
- unlock_user(p, arg1, 0);
- if (arg3) {
- puts = &uts;
- target_to_host_timespec(puts, arg3);
- } else {
- puts = NULL;
- }
- ret = get_errno(safe_rt_sigtimedwait(&set, &uinfo, puts,
- SIGSET_T_SIZE));
- if (!is_error(ret)) {
- if (arg2) {
- p = lock_user(VERIFY_WRITE, arg2, sizeof(target_siginfo_t),
- 0);
- if (!p) {
- return -TARGET_EFAULT;
- }
- host_to_target_siginfo(p, &uinfo);
- unlock_user(p, arg2, sizeof(target_siginfo_t));
- }
- ret = host_to_target_signal(ret);
- }
- }
- return ret;
case TARGET_NR_rt_sigqueueinfo:
{
siginfo_t uinfo;
diff --git a/linux-user/strace.list b/linux-user/strace.list
index 26df8b25cd..0b2c057673 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -932,9 +932,6 @@
#ifdef TARGET_NR_rt_sigreturn
{ TARGET_NR_rt_sigreturn, "rt_sigreturn" , NULL, NULL, NULL },
#endif
-#ifdef TARGET_NR_rt_sigtimedwait
-{ TARGET_NR_rt_sigtimedwait, "rt_sigtimedwait" , NULL, NULL, NULL },
-#endif
#ifdef TARGET_NR_rt_tgsigqueueinfo
{ TARGET_NR_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" , NULL,
print_rt_tgsigqueueinfo, NULL },
#endif
--
2.17.1
- [Qemu-devel] [PATCH v7 56/74] linux-user: Split out sigaction, rt_sigaction, (continued)
- [Qemu-devel] [PATCH v7 56/74] linux-user: Split out sigaction, rt_sigaction, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 58/74] linux-user: Split out sigprocmask, rt_sigprocmask, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 60/74] linux-user: Split out sigsuspend, rt_sigsuspend, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 55/74] linux-user: Split out getsid, setsid, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 47/74] linux-user: Split out ioctl, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 54/74] linux-user: Split out getpgid, getpgrp, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 52/74] linux-user: Split out umask, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 59/74] linux-user: Split out sigpending, rt_sigpending, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 64/74] linux-user: Split out gethostname, sethostname, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 65/74] linux-user: Split out getrlimit, setrlimit, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 61/74] linux-user: Split out rt_sigtimedwait,
Richard Henderson <=
- [Qemu-devel] [PATCH v7 62/74] linux-user: Split out rt_sigqueueinfo, rt_tgsigqueueinfo, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 63/74] linux-user: Split out sigreturn, rt_sigreturn, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 66/74] linux-user: Split out getrusage, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 67/74] linux-user: Split out gettimeofday, settimeofday, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 69/74] linux-user: Split out pselect6, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 68/74] linux-user: Split out select, _newselect, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 70/74] linux-user: Split out symlink, symlinkat, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 71/74] linux-user: Split out swapon, swapoff, Richard Henderson, 2019/05/19
- [Qemu-devel] [PATCH v7 72/74] linux-user: Split out reboot, Richard Henderson, 2019/05/19