From: Dmitry V. Levin Date: Mon, 20 Jul 2015 21:33:09 +0000 (+0000) Subject: sigreturn: make use of RVAL_DECODED X-Git-Tag: v4.11~344 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fa6c0879c7bcd3128c3407e87539ad73b2ed8231;p=strace sigreturn: make use of RVAL_DECODED * sigreturn.c (arch_sigreturn): New function. (sys_sigreturn): Use it. Return RVAL_DECODED. * linux/alpha/arch_sigreturn.c: Update. * linux/crisv10/arch_sigreturn.c: Likewise. * linux/m68k/arch_sigreturn.c: Likewise. * linux/microblaze/arch_sigreturn.c: Likewise. * linux/x86_64/arch_sigreturn.c: Likewise. --- diff --git a/linux/alpha/arch_sigreturn.c b/linux/alpha/arch_sigreturn.c index 278bae19..b70eb1d7 100644 --- a/linux/alpha/arch_sigreturn.c +++ b/linux/alpha/arch_sigreturn.c @@ -1,7 +1,7 @@ long addr; if (upeek(tcp->pid, REG_FP, &addr) < 0) - return 0; + return; addr += offsetof(struct sigcontext, sc_mask); tprints("{mask="); diff --git a/linux/crisv10/arch_sigreturn.c b/linux/crisv10/arch_sigreturn.c index b9e6a247..9dc09f34 100644 --- a/linux/crisv10/arch_sigreturn.c +++ b/linux/crisv10/arch_sigreturn.c @@ -2,7 +2,7 @@ long regs[PT_MAX + 1]; if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long)regs) < 0) { perror_msg("sigreturn: PTRACE_GETREGS"); - return 0; + return; } const long addr = regs[PT_USP] + offsetof(struct sigcontext, oldmask); diff --git a/linux/m68k/arch_sigreturn.c b/linux/m68k/arch_sigreturn.c index c3d3ea19..a2ccac64 100644 --- a/linux/m68k/arch_sigreturn.c +++ b/linux/m68k/arch_sigreturn.c @@ -1,20 +1,20 @@ long addr; if (upeek(tcp->pid, 4*PT_USP, &addr) < 0) - return 0; + return; /* Fetch pointer to struct sigcontext. */ if (umove(tcp, addr + 2 * sizeof(int), &addr) < 0) - return 0; + return; unsigned long mask[NSIG / 8 / sizeof(long)]; /* Fetch first word of signal mask. */ if (umove(tcp, addr, &mask[0]) < 0) - return 0; + return; /* Fetch remaining words of signal mask, located immediately before. */ addr -= sizeof(mask) - sizeof(long); if (umoven(tcp, addr, sizeof(mask) - sizeof(long), &mask[1]) < 0) - return 0; + return; tprintsigmask_addr("{mask=", mask); tprints("}"); diff --git a/linux/microblaze/arch_sigreturn.c b/linux/microblaze/arch_sigreturn.c index 8e2e7b89..0c7f99cd 100644 --- a/linux/microblaze/arch_sigreturn.c +++ b/linux/microblaze/arch_sigreturn.c @@ -4,7 +4,7 @@ long addr; /* Read r1, the stack pointer. */ if (upeek(tcp->pid, 1 * 4, &addr) < 0) - return 0; + return; addr += offsetof(struct sigcontext, oldmask); tprints("{mask="); diff --git a/linux/x86_64/arch_sigreturn.c b/linux/x86_64/arch_sigreturn.c index 62aeca5e..af49778b 100644 --- a/linux/x86_64/arch_sigreturn.c +++ b/linux/x86_64/arch_sigreturn.c @@ -5,6 +5,6 @@ if (current_personality != 1) { tprints("{mask="); print_sigset_addr_len(tcp, addr, NSIG / 8); tprints("}"); - return 0; + return; } #include "i386/arch_sigreturn.c" diff --git a/sigreturn.c b/sigreturn.c index 659d5af9..9f2e32de 100644 --- a/sigreturn.c +++ b/sigreturn.c @@ -14,10 +14,15 @@ # error NSIG < 32 #endif -SYS_FUNC(sigreturn) +static void +arch_sigreturn(struct tcb *tcp) { - if (entering(tcp)) { #include "arch_sigreturn.c" - } - return 0; +} + +SYS_FUNC(sigreturn) +{ + arch_sigreturn(tcp); + + return RVAL_DECODED; }