[PATCH] Decode recvmmsg syscall

Dmitry V. Levin ldv at altlinux.org
Tue Apr 6 17:56:43 UTC 2010


On Mon, Mar 29, 2010 at 08:14:36PM +0400, Dmitry V. Levin wrote:
> On Sat, Feb 13, 2010 at 12:28:26AM +0300, Dmitry V. Levin wrote:
> > On Fri, Feb 12, 2010 at 09:39:12PM +0100, Andreas Schwab wrote:
> > [...]
> > > +int
> > > +sys_recvmmsg(struct tcb *tcp)
> > > +{
> > > +	if (entering(tcp)) {
> > > +		tprintf("%ld, ", tcp->u_arg[0]);
> > > +		printmmsghdr(tcp, tcp->u_arg[1]);
> > > +		tprintf(", %ld, ", tcp->u_arg[2]);
> > > +		/* flags */
> > > +		printflags(msg_flags, tcp->u_arg[3], "MSG_???");
> > > +		/* timeout */
> > > +		tprintf(", ");
> > > +		print_timespec(tcp, tcp->u_arg[4]);
> > > +	}
> > > +	return 0;
> > > +}
> > 
> > If recvmmsg semantics is similar to recvmsg, then only file descriptor
> > can be decoded on entrance to the syscall, while the mmsghdr structure
> > (and all the rest) -- on exit from the syscall.
> 
> It appeared to be even more complicated because tcp->u_arg[4] should be
> decoded twice like in sys_ppoll, but tcp->u_arg[1] can be decoded only
> on exit.
> One possible solution is to abuse tcp->auxstr by storing the timespec
> decoded on entrance, then print this stored value on exit and replace it
> with the timespec decoded on exit.
> Another solution is to print as much as possible on entrance, and to
> place in tcp->auxstr the result of mmsghdr and timespec decoded on exit.
> Which one do you prefer?

I've implemented the first scenario, see top commits at
http://strace.git.sourceforge.net/git/gitweb.cgi?p=strace/strace;a=shortlog;h=ldv/recvmmsg


-- 
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20100406/41dc00e4/attachment.bin>


More information about the Strace-devel mailing list