All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Miloš Stojanović" <Milos.Stojanovic@rt-rk.com>
To: qemu-devel@nongnu.org, riku.voipio@iki.fi
Cc: laurent@vivier.eu, Miodrag.Dinic@rt-rk.com,
	Aleksandar.Markovic@rt-rk.com, Petar.Jovanovic@rt-rk.com,
	yongbok.kim@imgtec.com, Milos.Stojanovic@rt-rk.com
Subject: [Qemu-devel] [PATCH v2 13/16] [RFC] linux-user: add functions for working with the target signal mask
Date: Mon, 15 May 2017 16:59:53 +0200	[thread overview]
Message-ID: <1494860396-24930-14-git-send-email-Milos.Stojanovic@rt-rk.com> (raw)
In-Reply-To: <1494860396-24930-1-git-send-email-Milos.Stojanovic@rt-rk.com>

Add functions tswapal_target_sigset(), target_to_abi_ulong_old_sigset()
and abi_ulong_to_target_old_sigset().

The tswapal_target_sigset() function transforms target signal sets
from target to host endianness. This is helpful for tracking and working
with the target signal masks in the host endianness rather then keeping
it in the target endianness.

The target_to_abi_ulong_old_sigset() and abi_ulong_to_target_old_sigset()
functions are used for translating the signal set between the old way of
storing it in abi_ulong and the new target_sigset_t structure. They can
be used for expanding old implementations of certain system calls to
include the tracking of the target signal masks.

Signed-off-by: Miloš Stojanović <Milos.Stojanovic@rt-rk.com>
---
Change from v1 to v2:
tswapal_target_sigset() is no longer static since it was breaking the build.

 linux-user/qemu.h         |  1 +
 linux-user/signal.c       | 27 +++++++++++++++++++++++++++
 linux-user/syscall_defs.h |  4 ++++
 3 files changed, 32 insertions(+)

diff --git a/linux-user/qemu.h b/linux-user/qemu.h
index 6ce0811..7049517 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -391,6 +391,7 @@ void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info);
 void target_to_host_siginfo(siginfo_t *info, const target_siginfo_t *tinfo);
 int target_to_host_signal(int sig);
 int host_to_target_signal(int sig);
+void tswapal_target_sigset(target_sigset_t *d, const target_sigset_t *s);
 long do_sigreturn(CPUArchState *env);
 long do_rt_sigreturn(CPUArchState *env);
 abi_long do_sigaltstack(abi_ulong uss_addr, abi_ulong uoss_addr, abi_ulong sp);
diff --git a/linux-user/signal.c b/linux-user/signal.c
index b96d508..5c441db 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -207,6 +207,33 @@ void target_to_host_old_sigset(sigset_t *sigset,
     target_to_host_sigset(sigset, &d);
 }
 
+void target_to_abi_ulong_old_sigset(abi_ulong *old_sigset,
+                                    const target_sigset_t *target_sigset)
+{
+    target_sigset_t d;
+    tswapal_target_sigset(&d, target_sigset);
+
+    memcpy(old_sigset, &d.sig, sizeof(target_sigset_t));
+}
+
+void abi_ulong_to_target_old_sigset(target_sigset_t *target_sigset,
+                                    const abi_ulong *old_sigset)
+{
+    target_sigset_t d;
+
+    memcpy(&d.sig, old_sigset, sizeof(target_sigset_t));
+    tswapal_target_sigset(target_sigset, &d);
+}
+
+void tswapal_target_sigset(target_sigset_t *d, const target_sigset_t *s)
+{
+    int i;
+
+    for (i = 0; i < TARGET_NSIG_WORDS; i++) {
+        d->sig[i] = tswapal(s->sig[i]);
+    }
+}
+
 int block_signals(void)
 {
     TaskState *ts = (TaskState *)thread_cpu->opaque;
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 40c5027..7eec420 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -426,6 +426,10 @@ void host_to_target_old_sigset(abi_ulong *old_sigset,
                                const sigset_t *sigset);
 void target_to_host_old_sigset(sigset_t *sigset,
                                const abi_ulong *old_sigset);
+void target_to_abi_ulong_old_sigset(abi_ulong *old_sigset,
+                                    const target_sigset_t *target_sigset);
+void abi_ulong_to_target_old_sigset(target_sigset_t *target_sigset,
+                                    const abi_ulong *old_sigset);
 struct target_sigaction;
 int do_sigaction(int sig, const struct target_sigaction *act,
                  struct target_sigaction *oact);
-- 
1.9.1

  parent reply	other threads:[~2017-05-15 15:07 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-15 14:59 [Qemu-devel] [PATCH v2 00/16] Augment support for signal handling Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 01/16] linux-user: add strace for getuid(), gettid(), getppid(), geteuid() Miloš Stojanović
2017-05-15 23:33   ` Philippe Mathieu-Daudé
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 02/16] linux-user: add tkill(), tgkill() and rt_sigqueueinfo() strace Miloš Stojanović
2017-06-02 12:31   ` Peter Maydell
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 03/16] linux-user: fix ssetmask() system call Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 04/16] linux-user: fix mismatch of lock/unlock_user() invocations in rt_sigqueinfo() syscall Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 05/16] linux-user: fix argument type declaration of " Miloš Stojanović
2017-05-15 23:35   ` Philippe Mathieu-Daudé
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 06/16] linux-user: add support for rt_tgsigqueueinfo() system call Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 07/16] linux-user: add rt_tgsigqueueinfo() strace Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 08/16] linux-user: fix inconsistent spaces in print_siginfo() output Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 09/16] linux-user: add strace support for uinfo structure of rt_sigqueueinfo() and rt_tgsigqueueinfo() Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 10/16] [RFC] linux-user: add support for tracking the target signal mask Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 11/16] [RFC] linux-user: add target_sigdelset() and target_sigorset() Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 12/16] [RFC] linux-user: fix sigismember() check Miloš Stojanović
2017-05-15 14:59 ` Miloš Stojanović [this message]
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 14/16] [RFC] linux-user: add functionality for tracking target signal mask Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 15/16] [RFC] linux-user: add support for multiplexing larger target signals Miloš Stojanović
2017-05-15 14:59 ` [Qemu-devel] [PATCH v2 16/16] [RFC] linux-user: add support for multiplexing signals in rt_sigqueueinfo(), rt_tgsigqueueinfo(), kill() and tgkill() syscalls Miloš Stojanović
2017-06-02 12:59 ` [Qemu-devel] [PATCH v2 00/16] Augment support for signal handling Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1494860396-24930-14-git-send-email-Milos.Stojanovic@rt-rk.com \
    --to=milos.stojanovic@rt-rk.com \
    --cc=Aleksandar.Markovic@rt-rk.com \
    --cc=Miodrag.Dinic@rt-rk.com \
    --cc=Petar.Jovanovic@rt-rk.com \
    --cc=laurent@vivier.eu \
    --cc=qemu-devel@nongnu.org \
    --cc=riku.voipio@iki.fi \
    --cc=yongbok.kim@imgtec.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.