mips o32: fix sigreturn decoding

* signal.c (sys_sigreturn) [LINUX_MIPSO32]: Fix the address of signal mask.
[MIPS] Use print_sigset_addr_len to print signal mask.
diff --git a/signal.c b/signal.c
index f084772..b3a8a20 100644
--- a/signal.c
+++ b/signal.c
@@ -900,23 +900,28 @@
 			tprintsigmask_val("", mask);
 		}
 	}
-#elif defined(LINUX_MIPSN32) || defined(LINUX_MIPSN64)
-	/* This decodes rt_sigreturn.  The 64-bit ABIs do not have
-	   sigreturn.  */
+#elif defined MIPS
 	if (entering(tcp)) {
-		struct ucontext uc;
-		/* There are six words followed by a 128-byte siginfo.  */
-		long sp = mips_REG_SP + 6 * 4 + 128;
-		if (umove(tcp, sp, &uc) < 0)
-			return 0;
-		tprintsigmask_val(") (mask ", uc.uc_sigmask);
-	}
-#elif defined(LINUX_MIPSO32)
-	if (entering(tcp)) {
-		m_siginfo_t si;
-		if (umove(tcp, mips_REG_SP, &si) < 0)
-			return 0;
-		tprintsigmask_val(") (mask ", si.si_mask);
+# if defined LINUX_MIPSO32
+		/*
+		 * offsetof(struct sigframe, sf_mask) ==
+		 * sizeof(sf_ass) + sizeof(sf_pad) + sizeof(struct sigcontext)
+		 */
+		const long addr = mips_REG_SP + 6 * 4 +
+				  sizeof(struct sigcontext);
+# else
+		/*
+		 * This decodes rt_sigreturn.
+		 * The 64-bit ABIs do not have sigreturn.
+		 *
+		 * offsetof(struct rt_sigframe, rs_uc) ==
+		 * sizeof(sf_ass) + sizeof(sf_pad) + sizeof(struct siginfo)
+		 */
+		const long addr = mips_REG_SP + 6 * 4 + 128 +
+				  offsetof(struct ucontext, uc_sigmask);
+# endif
+		tprints(") (mask ");
+		print_sigset_addr_len(tcp, addr, NSIG / 8);
 	}
 #elif defined(CRISV10) || defined(CRISV32)
 	if (entering(tcp)) {