]> granicus.if.org Git - strace/commitdiff
s390: fix sigreturn decoding
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 4 Mar 2015 21:40:00 +0000 (21:40 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 4 Mar 2015 21:48:44 +0000 (21:48 +0000)
* signal.c (sys_sigreturn) [S390]: Fix signal mask decoding.

signal.c

index b3a8a20ed83542d88f708a4cb9723c23f6e0cb05..3437f02d6187347414949996ce2b42477c1a2c68 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -739,12 +739,17 @@ sys_sigreturn(struct tcb *tcp)
 #elif defined(S390) || defined(S390X)
        if (entering(tcp)) {
                long usp;
-               struct sigcontext sc;
+               long mask[NSIG / 8 / sizeof(long)];
                if (upeek(tcp->pid, PT_GPR15, &usp) < 0)
                        return 0;
-               if (umove(tcp, usp + __SIGNAL_FRAMESIZE, &sc) < 0)
+               if (umove(tcp, usp + __SIGNAL_FRAMESIZE, &mask) < 0)
                        return 0;
-               tprintsigmask_addr(") (mask ", sc.oldmask);
+# ifdef S390
+               usp = mask[0];
+               mask[0] = mask[1];
+               mask[1] = usp;
+# endif
+               tprintsigmask_addr(") (mask ", mask);
        }
 #elif defined I386 || defined X86_64 || defined X32
        if (entering(tcp)) {