]> granicus.if.org Git - strace/commitdiff
Linux: implement decoding of preadv and pwritev syscalls
authorDamir Shayhutdinov <damir@altlinux.ru>
Thu, 12 May 2011 12:57:40 +0000 (16:57 +0400)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 30 May 2011 21:14:55 +0000 (21:14 +0000)
* io.c [LINUX && HAVE_SYS_UIO_H] (sys_preadv, sys_pwritev): New functions.
* linux/syscall.h (sys_preadv, sys_pwritev): Declare them.
* linux/*/syscallent.h: Use them.

Signed-off-by: Damir Shayhutdinov <damir@altlinux.ru>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
18 files changed:
io.c
linux/alpha/syscallent.h
linux/arm/syscallent.h
linux/bfin/syscallent.h
linux/hppa/syscallent.h
linux/i386/syscallent.h
linux/ia64/syscallent.h
linux/m68k/syscallent.h
linux/microblaze/syscallent.h
linux/mips/syscallent.h
linux/powerpc/syscallent.h
linux/s390/syscallent.h
linux/s390x/syscallent.h
linux/sh/syscallent.h
linux/sh64/syscallent.h
linux/sparc/syscallent.h
linux/syscall.h
linux/x86_64/syscallent.h

diff --git a/io.c b/io.c
index 7ebf0ed52d27e9d67cf6908daccbaf5e1b336d2f..d94fb26512d394ed76d481196d17694a03789db0 100644 (file)
--- a/io.c
+++ b/io.c
@@ -304,6 +304,39 @@ sys_pwrite(struct tcb *tcp)
        return 0;
 }
 
+#if HAVE_SYS_UIO_H
+int
+sys_preadv(struct tcb *tcp)
+{
+       if (entering(tcp)) {
+               printfd(tcp, tcp->u_arg[0]);
+               tprintf(", ");
+       } else {
+               if (syserror(tcp)) {
+                       tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
+                       return 0;
+               }
+               tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]);
+               tprintf(", %lu, ", tcp->u_arg[2]);
+               printllval(tcp, "%llu", PREAD_OFFSET_ARG);
+       }
+       return 0;
+}
+
+int
+sys_pwritev(struct tcb *tcp)
+{
+       if (entering(tcp)) {
+               printfd(tcp, tcp->u_arg[0]);
+               tprintf(", ");
+               tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]);
+               tprintf(", %lu, ", tcp->u_arg[2]);
+               printllval(tcp, "%llu", PREAD_OFFSET_ARG);
+       }
+       return 0;
+}
+#endif /* HAVE_SYS_UIO_H */
+
 int
 sys_sendfile(struct tcb *tcp)
 {
index 3192bdf78cdff696bcff6cffeb75947f8c4c407d..07344bc32806310834e2b0423e217f75cfc601af 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"                  }, /* 487 */
        { 2,    TD,     sys_pipe2,              "pipe2"                 }, /* 488 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1"         }, /* 489 */
-       { 5,    TD,     printargs,              "preadv"                }, /* 490 */
-       { 5,    TD,     printargs,              "pwritev"               }, /* 491 */
+       { 5,    TD,     sys_preadv,             "preadv"                }, /* 490 */
+       { 5,    TD,     sys_pwritev,            "pwritev"               }, /* 491 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"     }, /* 492 */
        { 5,    TD,     printargs,              "perf_event_open"       }, /* 493 */
        { 2,    TD,     printargs,              "fanotify_init"         }, /* 494 */
index b914ca01ac8e44b3ee59093ba39f297a894edc02..784b986767f4bae038526b165d6a4c06695bafe9 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 358 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 359 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 360 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 361 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 362 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 361 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 362 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 363 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 364 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"      }, /* 365 */
index eb1fb9a4fcf91be71a7881174b8243c14b2c008d..7cfd79db9b0f0ffadd245dd3caa7f97de3b3cc46 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 363 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 364 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 365 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 366 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 367 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 366 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 367 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"     }, /* 368 */
        { 5,    TD,     printargs,              "perf_event_open"       }, /* 369 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"      }, /* 370 */
index 8f20bc0aefc8947cf773fb63d9809234b6a13c4b..119c26ecbae375ba56ed640274dedc86ad2559ca 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"                  }, /* 312 */
        { 2,    TD,     sys_pipe2,              "pipe2"                 }, /* 313 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1"         }, /* 314 */
-       { 5,    TD,     printargs,              "preadv"                }, /* 315 */
-       { 5,    TD,     printargs,              "pwritev"               }, /* 316 */
+       { 5,    TD,     sys_preadv,             "preadv"                }, /* 315 */
+       { 5,    TD,     sys_pwritev,            "pwritev"               }, /* 316 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"     }, /* 317 */
        { 5,    TD,     printargs,              "perf_event_open"       }, /* 318 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"              }, /* 319 */
index 6e2d466450e1dae26a38cb2f97483e34fafcd53b..54de0ade25ac07a5786e179bc2d8b026c853ed03 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 330 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 331 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 332 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 333 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 334 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 333 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 334 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 335 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 336 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"      }, /* 337 */
index fbd732da722fcb3cf2d8d2711391b8e6e678889c..17c45002f1c87f6399d35bdc678a81d7f4abe55f 100644 (file)
        { 3,    TD|TS,  sys_signalfd,           "signalfd"      }, /* 1307 */
        { 4,    TD,     sys_timerfd,            "timerfd"       }, /* 1308 */
        { 1,    TD,     sys_eventfd,            "eventfd"       }, /* 1309 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 1319 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 1320 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 1319 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 1320 */
        { 4,    TS,     printargs,              "rt_tgsigqueueinfo"}, /* 1321 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"      }, /* 1322 */
        { 2,    TD,     printargs,              "fanotify_init" }, /* 1323 */
index 1568bb6882c178730ca934d376fb4b2d25e81668..48b53785e4e5cda2af7dfd71cd7f248d6b2fab34 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 326 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 327 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 328 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 329 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 330 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 329 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 330 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 331 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 332 */
        { 0,    0,      sys_get_thread_area,    "get_thread_area"}, /* 333 */
index 026e46abcbe9f173a84a94b1ae129bf58a6a02d8..ed6e5254353d2a24ab071e5f37546d88d0017ee4 100644 (file)
        { 5,    TN,     sys_sendmsg,            "sendmsg"       }, /* 360 */
        { 5,    TN,     sys_recvmsg,            "recvmsg"       }, /* 361 */
        { 4,    TN,     sys_accept4,            "accept4"       }, /* 362 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 363 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 364 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 363 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 364 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"     }, /* 365 */
        { 5,    TN,     printargs,              "perf_event_open"       }, /* 366 */
        { 5,    TN,     printargs,              "recvmmsg"      }, /* 367 */
index 913d3d95ce5c91321cb58efe2771dd4fbc397570..5756fae1e4129f950a81b8e92ec225f3186a8fe5 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 4327 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 4328 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 4329 */
-       { 6,    TD,     printargs,              "preadv"        }, /* 4330 */
-       { 6,    TD,     printargs,              "pwritev"       }, /* 4331 */
+       { 6,    TD,     sys_preadv,             "preadv"        }, /* 4330 */
+       { 6,    TD,     sys_pwritev,            "pwritev"       }, /* 4331 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo" }, /* 4332 */
        { 5,    TD,     printargs,              "perf_event_open" }, /* 4333 */
        { 4,    TN,     sys_accept4,            "accept4"       }, /* 4334 */
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 5286 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 5287 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 5288 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 5289 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 5290 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 5289 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 5290 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo" }, /* 5291 */
        { 5,    TD,     printargs,              "perf_event_open" }, /* 5292 */
        { 4,    TN,     sys_accept4,            "accept4"       }, /* 5293 */
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 6290 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 6291 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 6292 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 6293 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 6294 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 6293 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 6294 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo" }, /* 6295 */
        { 5,    TD,     printargs,              "perf_event_open" }, /* 6296 */
        { 4,    TN,     sys_accept4,            "accept4"       }, /* 6297 */
index 91b13ee2c41b8053f35e0136ab6888cb2a82e98e..aeae7edf2edbafe73b13f3ed3cf9088827324721 100644 (file)
        { 2,    TD,     sys_pipe2,              "pipe2"                 }, /* 317 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1"         }, /* 318 */
        { 5,    TD,     printargs,              "perf_event_open"       }, /* 319 */
-       { 5,    TD,     printargs,              "preadv"                }, /* 320 */
-       { 5,    TD,     printargs,              "pwritev"               }, /* 321 */
+       { 5,    TD,     sys_preadv,             "preadv"                }, /* 320 */
+       { 5,    TD,     sys_pwritev,            "pwritev"               }, /* 321 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"     }, /* 322 */
        { 2,    TD,     printargs,              "fanotify_init"         }, /* 323 */
        { 5,    TD|TF,  printargs,              "fanotify_mark"         }, /* 324 */
index 85679de87cef8759b1811b5208adb7eb4e6240ff..c0777319a8d042e6253567f14431fd5c7a9b3434 100644 (file)
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 325 */
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 326 */
        { 1,    TD,     sys_epoll_create1,      "epoll_create1" }, /* 327 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 328 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 329 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 328 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 329 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 330 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 331 */
        { 2,    TD,     printargs,              "fanotify_init" }, /* 332 */
index 72a4b3bcb4e0f9038f4c8c93714af757ddfd0e94..9ae284e6f7e647d606e9d0e908ce245a339b3cc1 100644 (file)
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 325 */
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 326 */
        { 1,    TD,     sys_epoll_create1,      "epoll_create1" }, /* 327 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 328 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 329 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 328 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 329 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 330 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 331 */
        { 2,    TD,     printargs,              "fanotify_init" }, /* 332 */
index 2906800bfd779c65814b59e783f94195855af165..6ad858eeb629627492b6b2f52e1ed7c9c062773d 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 330 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 331 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 332 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 333 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 334 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 333 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 334 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 335 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 336 */
        { 2,    TD,     printargs,              "fanotify_init" }, /* 337 */
index 681a2482bc74756765e74b457da7a98090de8109..6f147a90d46442249d703965d1788ac7c671e2e1 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 358 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 359 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 360 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 361 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 362 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 361 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 362 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 363 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 364 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"      }, /* 365 */
index beacb879cd47a19f572b6e064d02a12a851bba08..6581748612c5658ae288aa6c70269374bb99aaa2 100644 (file)
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 321 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 322 */
        { 4,    TN,     sys_accept4,            "accept4"       }, /* 323 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 324 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 325 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 324 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 325 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 326 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 327 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"      }, /* 328 */
index e657f1e22d014d65cbaf082d4c60d4585658e893..b3a778d9fb1f9e03f286e6d4894983b6c9a27dba 100644 (file)
@@ -80,6 +80,7 @@ int sys_sched_get_priority_max(), sys_sched_get_priority_min();
 int sys_sched_rr_get_interval(), sys_nanosleep(), sys_mremap();
 int sys_sendmsg(), sys_recvmsg(), sys_setresuid(), sys_setresgid();
 int sys_getresuid(), sys_getresgid(), sys_pread(), sys_pwrite(), sys_getcwd();
+int sys_preadv(), sys_pwritev();
 int sys_sigaltstack(), sys_rt_sigprocmask(), sys_rt_sigaction();
 int sys_rt_sigpending(), sys_rt_sigsuspend(), sys_rt_sigqueueinfo();
 int sys_rt_sigtimedwait(), sys_prctl(), sys_poll(), sys_vfork();
index 2c2ed244f30f4e3579e5a3aadd899894aa03a99f..c58cc82b1d3332149774c3c4b67f07e7f90cb8b5 100644 (file)
        { 3,    TD,     sys_dup3,               "dup3"          }, /* 292 */
        { 2,    TD,     sys_pipe2,              "pipe2"         }, /* 293 */
        { 1,    TD,     sys_inotify_init1,      "inotify_init1" }, /* 294 */
-       { 5,    TD,     printargs,              "preadv"        }, /* 295 */
-       { 5,    TD,     printargs,              "pwritev"       }, /* 296 */
+       { 5,    TD,     sys_preadv,             "preadv"        }, /* 295 */
+       { 5,    TD,     sys_pwritev,            "pwritev"       }, /* 296 */
        { 4,    TP|TS,  printargs,              "rt_tgsigqueueinfo"}, /* 297 */
        { 5,    TD,     printargs,              "perf_event_open"}, /* 298 */
        { 5,    TN,     sys_recvmmsg,           "recvmmsg"      }, /* 299 */