]> granicus.if.org Git - strace/commitdiff
m68k: fix sigreturn decoding
authorAndreas Schwab <schwab@suse.de>
Wed, 11 Mar 2015 14:08:42 +0000 (15:08 +0100)
committerAndreas Schwab <schwab@suse.de>
Mon, 16 Mar 2015 09:55:20 +0000 (10:55 +0100)
* sigreturn.c (sys_sigreturn) [M68K]: Fetch the words of the
signal mask from the proper place.

sigreturn.c

index c253a0c5fecb727f69faf18f12b164c21bb1dfef..365ef1ab0be57ab4eba3edd262f275696bb47c04 100644 (file)
@@ -128,8 +128,20 @@ sys_sigreturn(struct tcb *tcp)
                long addr;
                if (upeek(tcp->pid, 4*PT_USP, &addr) < 0)
                        return 0;
+               /* Fetch pointer to struct sigcontext.  */
+               if (umove(tcp, addr + 2 * sizeof(int), &addr) < 0)
+                       return 0;
+               unsigned long mask[NSIG / 8 / sizeof(long)];
+               /* Fetch first word of signal mask.  */
+               if (umove(tcp, addr, &mask[0]) < 0)
+                       return 0;
+               /* Fetch remaining words of signal mask, located
+                  immediately before.  */
+               addr -= sizeof(mask) - sizeof(long);
+               if (umoven(tcp, addr, sizeof(mask) - sizeof(long), (char *) &mask[1]) < 0)
+                       return 0;
                tprints("{mask=");
-               print_sigset_addr_len(tcp, addr, NSIG / 8);
+               tprintsigmask_addr("", mask);
                tprints("}");
        }
 #elif defined(ALPHA)