(root)/
strace-6.5/
src/
process_vm.c
       1  /*
       2   * Copyright (c) 2012 Denys Vlasenko <vda.linux@googlemail.com>
       3   * Copyright (c) 2012-2015 Dmitry V. Levin <ldv@strace.io>
       4   * Copyright (c) 2014-2021 The strace developers.
       5   * All rights reserved.
       6   *
       7   * SPDX-License-Identifier: LGPL-2.1-or-later
       8   */
       9  
      10  #include "defs.h"
      11  
      12  SYS_FUNC(process_vm_readv)
      13  {
      14  	if (entering(tcp)) {
      15  		/* arg 1: pid */
      16  		printpid(tcp, tcp->u_arg[0], PT_TGID);
      17  		tprint_arg_next();
      18  	} else {
      19  		kernel_ulong_t local_iovcnt = tcp->u_arg[2];
      20  		kernel_ulong_t remote_iovcnt = tcp->u_arg[4];
      21  		kernel_ulong_t flags = tcp->u_arg[5];
      22  
      23  		/* arg 2: local iov */
      24  		tprint_iov_upto(tcp, local_iovcnt, tcp->u_arg[1], tcp->u_rval,
      25  				syserror(tcp) ? iov_decode_addr
      26  					      : iov_decode_str,
      27  				NULL);
      28  		tprint_arg_next();
      29  
      30  		/* arg 3: local iovcnt */
      31  		PRINT_VAL_U(local_iovcnt);
      32  		tprint_arg_next();
      33  
      34  		/* arg 4: remote iov */
      35  		tprint_iov(tcp, remote_iovcnt, tcp->u_arg[3], iov_decode_addr);
      36  		tprint_arg_next();
      37  
      38  		/* arg 5: remote iovcnt */
      39  		PRINT_VAL_U(remote_iovcnt);
      40  		tprint_arg_next();
      41  
      42  		/* arg 6: flags */
      43  		PRINT_VAL_U(flags);
      44  	}
      45  	return 0;
      46  }
      47  
      48  SYS_FUNC(process_vm_writev)
      49  {
      50  	kernel_ulong_t local_iovcnt = tcp->u_arg[2];
      51  	kernel_ulong_t remote_iovcnt = tcp->u_arg[4];
      52  	kernel_ulong_t flags = tcp->u_arg[5];
      53  
      54  	/* arg 1: pid */
      55  	printpid(tcp, tcp->u_arg[0], PT_TGID);
      56  	tprint_arg_next();
      57  
      58  	/* arg 2: local iov */
      59  	tprint_iov(tcp, local_iovcnt, tcp->u_arg[1], iov_decode_str);
      60  	tprint_arg_next();
      61  
      62  	/* arg 3: local iovcnt */
      63  	PRINT_VAL_U(local_iovcnt);
      64  	tprint_arg_next();
      65  
      66  	/* arg 4: remote iov */
      67  	tprint_iov(tcp, remote_iovcnt, tcp->u_arg[3], iov_decode_addr);
      68  	tprint_arg_next();
      69  
      70  	/* arg 5: remote iovcnt */
      71  	PRINT_VAL_U(remote_iovcnt);
      72  	tprint_arg_next();
      73  
      74  	/* arg 6: flags */
      75  	PRINT_VAL_U(flags);
      76  
      77  	return RVAL_DECODED;
      78  }