File 0007-m68k-fix-sigreturn-decoding.patch of Package strace.2926

From 712f0e12bd3cc2059229cbe301192768ab7fea07 Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@suse.de>
Date: Wed, 11 Mar 2015 15:08:42 +0100
Subject: [PATCH 07/15] m68k: fix sigreturn decoding

* sigreturn.c (sys_sigreturn) [M68K]: Fetch the words of the
signal mask from the proper place.
---
 sigreturn.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/sigreturn.c b/sigreturn.c
index c253a0c..365ef1a 100644
--- a/sigreturn.c
+++ b/sigreturn.c
@@ -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)
-- 
2.3.3

openSUSE Build Service is sponsored by