On Wed, Mar 11, 2015 at 03:10:34PM +0100, Andreas Schwab wrote:
> * 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 648bd0a..a96257f 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;

You might want to save a syscall here by fetching the whole sizeof(mask)
in a single umoven call.


-- 
ldv

Attachment: pgpsUadxewv8h.pgp
Description: PGP signature

------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to