]> granicus.if.org Git - strace/commitdiff
Fix compat personality support for sgetmask syscall
authorDmitry V. Levin <ldv@altlinux.org>
Tue, 23 May 2017 23:20:18 +0000 (23:20 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 23 May 2017 23:20:18 +0000 (23:20 +0000)
* signal.c (SYS_FUNC(sgetmask)): Replace sprintsigmask_val
with sprint_old_sigmask_val.
* tests/sxetmask.c (main): Check decoding of signal mask containing
RT signals.

signal.c
tests/sxetmask.c

index a384f1fae89f1adc56cde6e97d8b26e3f97ba69c..2c21f906042f1ce500bf17462762c53e3435f7c6 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -397,7 +397,7 @@ SYS_FUNC(signal)
 SYS_FUNC(sgetmask)
 {
        if (exiting(tcp) && !syserror(tcp)) {
-               tcp->auxstr = sprintsigmask_val("mask ", tcp->u_rval);
+               tcp->auxstr = sprint_old_sigmask_val("mask ", tcp->u_rval);
                return RVAL_HEX | RVAL_STR;
        }
        return 0;
index 1554319622330c1de48392a355b741f51029acf9..0ede9ad73ce293a5b6669480909c245442d5245d 100644 (file)
@@ -99,6 +99,18 @@ main(void)
                if (uget.old_mask != (unsigned long) rc)
                        error_msg_and_fail("sigprocmask returned %#lx",
                                           uget.old_mask);
+
+               if (sizeof(long) > 4) {
+                       sigaddset(&uset.libc_mask, 32 + 27);
+                       if (sigprocmask(SIG_SETMASK, &uset.libc_mask, NULL))
+                               perror_msg_and_fail("sigprocmask");
+                       rc = k_sgetmask();
+                       printf("sgetmask() = %#lx"
+                              " (mask [USR1 USR2 RT_27])\n", rc);
+                       if (uset.old_mask != (unsigned long) rc)
+                               error_msg_and_fail("sigprocmask set %#lx",
+                                                  uset.old_mask);
+               }
        }
 
        puts("+++ exited with 0 +++");