]> granicus.if.org Git - strace/blobdiff - process_vm.c
process_vm: change size arguments type from unsigned long to kernel_ureg_t
[strace] / process_vm.c
index 82e1e16a1b45b5739f30d9711fa60364e8a91f5c..203886ab656e932bb9b3baec8f608c11d8684e5f 100644 (file)
@@ -32,42 +32,45 @@ SYS_FUNC(process_vm_readv)
 {
        if (entering(tcp)) {
                /* arg 1: pid */
-               tprintf("%ld, ", tcp->u_arg[0]);
+               tprintf("%d, ", (int) tcp->u_arg[0]);
        } else {
+               kernel_ureg_t local_iovcnt = tcp->u_arg[2];
+               kernel_ureg_t remote_iovcnt = tcp->u_arg[4];
+               kernel_ureg_t flags = tcp->u_arg[5];
+
                /* arg 2: local iov */
-               if (syserror(tcp)) {
-                       printaddr(tcp->u_arg[1]);
-               } else {
-                       tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1);
-               }
+               tprint_iov_upto(tcp, local_iovcnt, tcp->u_arg[1],
+                          syserror(tcp) ? IOV_DECODE_ADDR : IOV_DECODE_STR,
+                          tcp->u_rval);
                /* arg 3: local iovcnt */
-               tprintf(", %lu, ", tcp->u_arg[2]);
+               tprintf(", %lu, ", local_iovcnt);
                /* arg 4: remote iov */
-               if (syserror(tcp)) {
-                       printaddr(tcp->u_arg[3]);
-               } else {
-                       tprint_iov(tcp, tcp->u_arg[4], tcp->u_arg[3], 0);
-               }
+               tprint_iov(tcp, remote_iovcnt, tcp->u_arg[3],
+                          IOV_DECODE_ADDR);
                /* arg 5: remote iovcnt */
                /* arg 6: flags */
-               tprintf(", %lu, %lu", tcp->u_arg[4], tcp->u_arg[5]);
+               tprintf(", %lu, %lu", remote_iovcnt, flags);
        }
        return 0;
 }
 
 SYS_FUNC(process_vm_writev)
 {
+       kernel_ureg_t local_iovcnt = tcp->u_arg[2];
+       kernel_ureg_t remote_iovcnt = tcp->u_arg[4];
+       kernel_ureg_t flags = tcp->u_arg[5];
+
        /* arg 1: pid */
-       tprintf("%ld, ", tcp->u_arg[0]);
+       tprintf("%d, ", (int) tcp->u_arg[0]);
        /* arg 2: local iov */
-       tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1);
+       tprint_iov(tcp, local_iovcnt, tcp->u_arg[1], IOV_DECODE_STR);
        /* arg 3: local iovcnt */
-       tprintf(", %lu, ", tcp->u_arg[2]);
+       tprintf(", %lu, ", local_iovcnt);
        /* arg 4: remote iov */
-       tprint_iov(tcp, tcp->u_arg[4], tcp->u_arg[3], 0);
+       tprint_iov(tcp, remote_iovcnt, tcp->u_arg[3], IOV_DECODE_ADDR);
        /* arg 5: remote iovcnt */
        /* arg 6: flags */
-       tprintf(", %lu, %lu", tcp->u_arg[4], tcp->u_arg[5]);
+       tprintf(", %lu, %lu", remote_iovcnt, flags);
 
        return RVAL_DECODED;
 }