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
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